AtCoder ABC 127 A&B&C&D AtCoder - 127
Ich werde in naher Zukunft zurück sein, um E & F zu lösen.
2019/05/27 B-Code-Fix
A - Ferris Wheel
private void solveA() {
int a = nextInt();
int b = nextInt();
if (a <= 5) {
out.println(0);
} else if (a <= 12) {
out.println(b / 2);
} else {
out.println(b);
}
}
B - Algae
private void solveB() {
int r = nextInt();
int d = nextInt();
int x2000 = nextInt();
int pre = x2000;
for (int i = 1; i <= 10; i++) {
pre = r * pre - d;
out.println(pre);
}
}
C - Prison
4 2 1 3 2 4
Key:1 | Key:2 | Key:3 | Key:4 | |
---|---|---|---|---|
Gate:1 | O | O | O | |
Gate:2 | O | O | O | |
Der Schlüssel, um alles zu öffnen | ↑ | ↑ |
Ich habe es durch eine Nummer ersetzt.
Key:1 | Key:2 | Key:3 | Key:4 | |
---|---|---|---|---|
Gate:1 | 1 | 1 | 1 | |
Gate:2 | 1 | 1 | 1 | |
gesamt | 1 | 2 | 2 | 1 |
Ein Schlüssel mit total = Anzahl der Tore kann alle Türen öffnen. Die Imosu-Methode ist schneller für die Verarbeitung, z. B. das Hinzufügen von einem bestimmten Bereich zu einem bestimmten Bereich.
Also werde ich die übliche Referenz-Site-Liste veröffentlichen
int n = nextInt();
int m = nextInt();
//Für Memos, welche Zifferntaste an jedem Tor benötigt wird
int[] wk = new int[n];
for (int i = 0; i < m; i++) {
int l = nextInt() - 1;
int r = nextInt() - 1;
wk[l] += 1;
if (r + 1 < n) {
wk[r + 1] -= 1;
}
}
//
for (int i = 1; i < n; i++) {
wk[i] += wk[i - 1];
}
int cnt = 0;
for (int i = 0; i < n; i++) {
if (wk[i] == m) {
cnt++;
}
}
out.println(cnt);
D - Integer Cards
――Für Teil 3 wird im Code die folgende Verarbeitung ausgeführt. Dies ist jedoch "Da B und C in absteigender Reihenfolge angeordnet sind, wird der Teil, der einmal mit C umgeschrieben wurde, danach nicht umgeschrieben (wenn er umgeschrieben wird)." C größer als C erscheint nicht) " ――Wenn Sie dies nicht tun, wird Ihnen aufgrund zusätzlicher Verarbeitung die Zeit ausgehen.
//Es macht keinen Sinn, dieselbe Stelle neu zu schreiben (zu vergleichen), also verschieben Sie den Start
int start = 0;
private void solveD() {
int n = nextInt();
int m = nextInt();
long[] a = LongStream.range(0, n).map(i -> nextLong()).toArray();
//In aufsteigender Reihenfolge sortieren
Arrays.sort(a);
int[][] bc = IntStream.range(0, m).collect(() -> new int[m][2],
(t, i) -> {
t[i][0] = nextInt();
t[i][1] = nextInt();
},
(t, u) -> {
Stream.concat(Arrays.stream(t), Arrays.stream(u));
});
//Sortieren Sie in absteigender Reihenfolge von C.
Arrays.sort(bc, (x, y) -> -Integer.compare(x[1], y[1]));
//Es macht keinen Sinn, dieselbe Stelle neu zu schreiben (zu vergleichen), also verschieben Sie den Start
int start = 0;
for (int j = 0; j < m; j++) {
int max = Integer.min((start + bc[j][0]), n);
for (int k = start; k < max; k++) {
if (bc[j][1] > a[k]) {
//a[i]Ist kleiner wird umgeschrieben
a[k] = bc[j][1];
//Vorbereitung für den nächsten Start
start = k + 1;
} else {
//Bereits sortiert, also a[i]Keine Notwendigkeit mehr zu vergleichen, wenn größer ist
break;
}
}
}
//gesamt
long res = Arrays.stream(a).sum();
out.println(res);
}
Recommended Posts