AtCoder ABC 017 A&B&C AtCoder - 017
private void solveA() {
int res = 0;
for (int i = 0; i < 3; i++) {
int point = nextInt();
int ratio = nextInt();
res += point * ratio / 10;
}
out.println(res);
}
--Wenn 'ch''o''k''u' eingeschlossen ist, wird es kein Choku-Wort sein
private void solveB() {
String res = next().replaceAll("ch", "").replaceAll("o", "").replaceAll("k", "").replaceAll("u", "");
out.println(res.length() == 0 ? "YES" : "NO");
}
Aus dem Problem
Nimm nicht alle Arten von Juwelen
――Welche der 1-n Arten von Juwelen ist am lohnendsten, wenn man sie nicht nimmt? Kann gelesen werden als
―― Welche Ruinen erforschen Sie? Welches Juwel sollte nicht genommen werden, nicht? Denken Sie mit
――Wenn Sie eine bestimmte Art von Juwel nehmen, ist es besser, alle Juwelen der gleichen Art in anderen Ruinen zu nehmen.
Wenn Sie die Frage lesen, lautet sie "Finden Sie die maximale Punktzahl, wenn Sie kein bestimmtes Juwel nehmen".
$ Wenn Sie Juwel 1 nicht nehmen, wenn Sie Juwel 2 nicht nehmen, wenn Sie Juwel 3 nicht nehmen ... Wenn Sie Juwel N $ nicht nehmen ――Wenn Sie einfach die Schleife drehen, wird es nie rechtzeitig sein, also versuchen Sie es wie eine kumulative Summe
Eingabebeispiel 1:
4 6 1 3 30 2 3 40 3 6 25 6 6 10
――Zum Beispiel: Wenn Sie sich entscheiden, kein Juwel zu nehmen, ist dies wie folgt
Juwel 1 | Juwel 2 | Juwel 3 | Juwel 4 | Juwel 5 | Juwel 6 | |
---|---|---|---|---|---|---|
Ruinen 1 | 30 | 30 | 30 | |||
Ruinen 2 | 40 | 40 | 40 | 40 | ||
Ruinen 3 | 25 | 25 | ||||
Ruinen 4 | 10 | 10 | 10 | 10 | 10 | |
gesamt (Maximaler Wert ohne Juwelen) |
75 | 35 | 10 | 80 | 80 | 70 |
――Wenn dies der Fall ist, wird der letzte nicht berücksichtigt ――Jedoch hatte ich das Gefühl, dass der kumulative Summenanteil durch die Imos-Methode implementiert werden könnte, also habe ich eine andere Lösung ausprobiert.
private void solveC2() {
int n = nextInt();
int m = nextInt();
int[] l = new int[n];
int[] r = new int[n];
int[] s = new int[n];
int[][] res = new int[m + 1][1];
for (int i = 0; i < n; i++) {
l[i] = nextInt();
r[i] = nextInt();
s[i] = nextInt();
for (int j = 1; j <= m; j++) {
if (j < l[i] || r[i] < j) {
res[j][0] += s[i];
}
}
}
Arrays.sort(res, (x, y) -> -Integer.compare(x[0], y[0]));
out.println(res[0][0]);
}
Der folgende Teil der obigen Lösung wurde korrigiert
for (int j = 1; j <= m; j++) {
if (j < l[i] || r[i] < j) {
res[j][0] += s[i];
}
}
private void solveC() {
int n = nextInt();
int m = nextInt();
int[] l = new int[n];
int[] r = new int[n];
int[] s = new int[n];
int[] res = new int[m];
for (int i = 0; i < n; i++) {
l[i] = nextInt() - 1;
r[i] = nextInt() - 1;
s[i] = nextInt();
res[0] += s[i];
res[l[i]] -= s[i];
if (r[i] < m - 1) {
res[r[i] + 1] += s[i];
}
}
for (int i = 1; i < res.length; i++) {
res[i] = res[i] + res[i - 1];
}
Arrays.sort(res);
out.println(res[m - 1]);
}
Recommended Posts