AtCoder ABC 128 A&B&C&D AtCoder - 128
Ich werde in naher Zukunft zurück sein, um E & F zu lösen.
A - Apple Pie
private void solveA() {
out.println((nextInt() * 3 + nextInt()) / 2);
}
B - Guidebook
private void solveB() {
int n = nextInt();
String[][] s = new String[n][3];
for (int i = 0; i < n; i++) {
s[i][0] = next();
s[i][1] = next();
s[i][2] = Integer.toString(i + 1);
}
Arrays.sort(s,
(x, y) -> {
if (x[0].compareTo(y[0]) < 0) {
return -1;
} else if (x[0].compareTo(y[0]) > 0) {
return 1;
} else {
return -Integer.compare(Integer.parseInt(x[1]), Integer.parseInt(y[1]));
}
});
for (int i = 0; i < s.length; i++) {
out.println(s[i][2]);
}
}
C - Switches
--Schalter 1-5, die Anzahl der Schalter, die eingeschaltet sein müssen \ Schalternummer
Glühbirnennummer\Nummer wechseln | 1 | 2 | 3 | 4 | 5 | ||
---|---|---|---|---|---|---|---|
1 | 0 | 〇 | 〇 | 〇 | |||
2 | 1 | 〇 | 〇 |
Es gibt also so viele Optionen wie $ 2 ^ {Anzahl der Schalter} $
Versuchen Sie insbesondere das folgende Muster ($ 2 ^ {Anzahl der Schalter} $) Am Beispiel von Ausgabebeispiel 3
Muster\Schalter | 1 | 2 | 3 | 4 | 5 | ||
---|---|---|---|---|---|---|---|
1 | 〇 | 1 einschalten Die Glühbirnen 1 und 2 sind aus |
|||||
2 | 〇 | 〇 | Schalter 1,2 EIN Die Glühbirnen 1 und 2 sind eingeschaltet |
||||
3 | 〇 | 〇 | 〇 | Schalter 1,2,3 EIN Glühbirne 1 leuchtet. Glühbirne 2 ist AUS |
|||
xxx | 〇 | 〇 | Schalter 1,5 EIN Glühbirne 1 leuchtet. Glühbirne 2 ist AUS |
private void solveC() {
int n = nextInt();
int m = nextInt();
int[] k = new int[m];
List<List<Integer>> s = new ArrayList<List<Integer>>();
for (int i = 0; i < k.length; i++) {
k[i] = nextInt();
List<Integer> temp = new ArrayList<Integer>();
for (int j = 0; j < k[i]; j++) {
temp.add(nextInt());
}
s.add(temp);
}
int[] p = IntStream.range(0, m).map(i -> nextInt()).toArray();
long res = 0;
for (int i = 0; i < 1 << n; i++) {
boolean isResult = true;
for (int j = 0; j < m; j++) {
//Holen Sie sich die Schaltflächenliste für Glühbirne j
List<Integer> sList = s.get(j);
//Ist es gerade oder seltsam, dass die Glühbirne j eingeschaltet sein muss?
int compareBase = p[j];
//Wie viele der zum Einschalten der Glühbirne j erforderlichen Tasten sind eingeschaltet?
int compare = 0;
for (Integer buttonNum : sList) {
/*
*Suchen Sie die EIN-Taste in der Tastenliste der Glühbirne j
* buttonNum - 1 ->Tastennummer(Nach Absprache-1)
* (i & (1 << (buttonNum - 1)) ->Befindet sich an der Position der Tastennummer eine Flagge?
*/
if ((i & (1 << (buttonNum - 1))) >= 1) {
compare++;
}
}
//Beurteilen Sie die Anzahl der Quoten und Quoten, bei denen der Knopf eingeschaltet war, und beurteilen Sie, ob die Anforderung der Glühbirne j erfüllt ist.
if (compareBase != compare % 2) {
isResult = false;
break;
}
}
if (isResult) {
//Bei diesem Muster sind alle Glühbirnen eingeschaltet
res++;
}
}
out.println(res);
}
D - equeue
private void solveD() {
int n = nextInt();
int k = nextInt();
long[] wk = new long[n];
for (int i = 0; i < n; i++) {
wk[i] = nextInt();
}
long res = 0;
//Nimm so viel wie möglich von links
for (int l = 0; l <= k; l++) {
//Nimm so viel wie möglich von rechts
for (int r = 0; r <= k; r++) {
//Unterbrechen Sie, wenn die Anzahl der Operationen k überschreitet
if (l + r > k) {
break;
}
//Insgesamt zur Hand
long now = 0;
List<Long> s = new ArrayList<Long>();
int pickCount = 0;
//Fügen Sie nur die Menge hinzu, die Sie von der linken Seite erhalten haben
for (int i = 0; i < Integer.min(l, n); i++) {
long tmp = wk[i];
now += tmp;
s.add(tmp);
pickCount++;
}
/*
*Fügen Sie nur die Menge hinzu, die Sie von der rechten Seite erhalten haben
*Ich spiele mit Max auf der rechten Seite
* -Weil die Anzahl der Operationen (K) größer als N sein kann
* -Es gibt zwei Schleifen, eine von der linken Seite und die andere von der rechten Seite.
*Wenn K größer als N ist, kann es dasselbe dauern
*Daher werden die ursprüngliche maximale Erfassungsnummer von r und die Erfassungsnummer von l verglichen.
* e.g.K>=Wenn N, l Integer.min(l, n)Und n wird zurückgegeben.
*/
for (int i = n - 1; i > Integer.max(n - 1 - r, Integer.min(l, n)); i--) {
long tmp = wk[i];
now += tmp;
s.add(tmp);
pickCount++;
}
//Ordne sie so an, dass du sie nicht brauchst, um die Extras wegzuwerfen
Collections.sort(s);
//Die Häufigkeit, mit der Sie zusätzliche Akquisitionen wegwerfen können
int d = k - pickCount;
//Sie können nicht mehr als so oft wegwerfen, also brechen Sie
for (int i = 0; i < Integer.min(d, s.size()); i++) {
//
//Wenn der Wert des entfernten Schmuckstücks nicht negativ ist, muss es nicht weggeworfen werden
if (s.get(i) > 0) {
break;
}
//Wirf Juwelen mit negativem Wert weg
now -= s.get(i);
}
res = Long.max(res, now);
}
}
out.println(res);
}
Recommended Posts