AtCoder ABC 019 A&B&C AtCoder - 019
Ich erkannte, dass es für mich schwierig sein würde, den Problemnamen ohne den Problemnamen zu finden. Geben Sie daher von nun an den Problemnamen ein.
** 17. Mai 2019: Feste Codes A und B **
--Code korrigiert, weil Sie im Kommentar darauf hingewiesen haben, dass die Sortierung zusammen mit dem Stream verarbeitet werden kann
―― Da es sich um den Medianwert handelt, sortieren Sie ihn in der Mitte
private void solveA() {
int[] wk = IntStream.range(0, 3).map(i -> nextInt()).sorted().toArray();
out.println(wk[1]);
}
private void solveA() {
int[] wk = IntStream.range(0, 3).map(i -> nextInt()).toArray();
Arrays.sort(wk);
out.println(wk[1]);
}
** 2019/05/19 postscript **: In der Kommentarspalte befindet sich der Code @swordone. Das ist einfacher.
Fügen Sie hinzu, indem Sie zählen, wie viele aufeinanderfolgende gleiche Zeichenfolgen vorhanden sind --Cnt ist 0 nach dem Verlassen der Schleife = Das letzte 1 Zeichen unterscheidet sich vom letzten -1 Zeichen, also zählen --Cnt ist nach dem Verlassen der Schleife nicht 0 = ++, da das letzte das gleiche Zeichen ist
private void solveB() {
char[] wk = next().toCharArray();
StringBuilder builder = new StringBuilder();
int cnt = 0;
for (int i = 0; i < wk.length - 1; i++) {
if (cnt == 0) {
builder.append(wk[i]);
cnt++;
}
if (wk[i] != wk[i + 1]) {
builder.append(cnt);
cnt = 0;
} else {
cnt++;
}
}
if (cnt != 0) {
builder.append(cnt);
} else {
builder.append(wk[wk.length - 1]);
builder.append(1);
}
out.println(builder.toString());
}
private void solveC() {
Set<Long> wk = new HashSet<Long>();
List<Long> base = new ArrayList<Long>();
int n = nextInt();
for (int i = 0; i < n; i++) {
long val = nextLong();
wk.add(val);
base.add(val);
}
Collections.sort(base);
long max = base.get(base.size() - 1);
long res = 0;
for (Long longVal : base) {
if (wk.contains(longVal)) {
wk.remove(longVal);
res += recursiveC(wk, max, longVal);
}
if (wk.size() == 0) {
break;
}
}
out.println(res);
}
private int recursiveC(Set<Long> wk, long max, long current) {
if (current > max || wk.size() == 0) {
return 1;
}
current <<= 1;
wk.remove(current);
return recursiveC(wk, max, current);
}
――Nach AC in einer Schleife wurde es "Zählt dies am Ende nur eine ungerade Zahl?", Also habe ich AC ausprobiert -Die Zahl, die $ 1 verdoppelt, wird am Ende zu 1, wenn sie durch 2 geteilt wird. $
private void solveC2() {
Set<Integer> wk = new HashSet<Integer>();
int n = nextInt();
for (int i = 0; i < n; i++) {
int val = nextInt();
while ((val & 1) != 1) {
val /= 2;
}
wk.add(val);
}
out.println(wk.size());
}
Recommended Posts