Submission #2612431
Source Code Expand
import static java.lang.Integer.parseInt; import static java.lang.Long.parseLong; import static java.lang.Math.max; import static java.lang.System.exit; import static java.util.Arrays.fill; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.util.PriorityQueue; import java.util.StringTokenizer; public class Main { static class Token implements Comparable<Token> { int index; final int time; Token(int index, int time) { this.index = index; this.time = time; } public int compareTo(Token o) { return time - o.time; } } static void solve() throws Exception { int c1 = scanInt(); int c2 = scanInt(); int c = max(c1, c2); int k = scanInt(); int bit[] = new int[c]; String s1 = scanString(); for (int i = 0; i < c1; i++) { if (s1.charAt(i) == '1') { bit[c1 - i - 1] |= 1; } } String s2 = scanString(); for (int i = 0; i < c2; i++) { if (s2.charAt(i) == '1') { bit[c2 - i - 1] |= 2; } } int lCap = 2 * c + 2; int lIndex[] = new int[lCap], lValue[] = new int[lCap]; int lPrev[] = new int[lCap], lNext[] = new int[lCap], lFree = 1; Token lToken[] = new Token[lCap]; for (int i = 1; i < lCap - 1; i++) { lNext[i] = i + 1; } lNext[lCap - 1] = -1; lPrev[0] = lNext[0] = 0; lIndex[0] = lValue[0] = -1; PriorityQueue<Token> pq = new PriorityQueue<>(); for (int i = 0; i < c; i++) { if (bit[i] == 0) { continue; } int cur = lFree; lFree = lNext[lFree]; lIndex[cur] = i; lValue[cur] = bit[i]; int last = lPrev[0]; if (lValue[last] == 3 && lValue[cur] != 3) { lToken[last] = new Token(last, lIndex[cur] - lIndex[last]); pq.add(lToken[last]); } lPrev[cur] = last; lNext[cur] = 0; lPrev[0] = lNext[last] = cur; } for (int step = 1; step <= k; step++) { while (!pq.isEmpty() && pq.element().time == step) { int cur = pq.remove().index; lToken[cur] = null; int v; { int next = lNext[cur]; v = lValue[next]; lValue[cur] = 3 ^ v; lIndex[cur] += step; int prev = lPrev[cur]; if (lValue[prev] == 3) { lToken[prev] = new Token(prev, lIndex[cur] - lIndex[prev]); pq.add(lToken[prev]); } int next2 = lNext[next]; lNext[cur] = next2; lPrev[next2] = cur; lNext[next] = lFree; lFree = next; } int curIndex = lIndex[cur]; while (true) { int next = lNext[cur]; ++curIndex; if (lValue[next] != 3 && lIndex[next] == curIndex) { if (lValue[next] == v) { int next2 = lNext[next]; lNext[cur] = next2; lPrev[next2] = cur; lNext[next] = lFree; lFree = next; } else { lValue[next] = 3; lIndex[next] -= step; int next2 = lNext[next]; if (next2 != 0 && lValue[next2] != 3) { lToken[next] = new Token(next, lIndex[next2] - lIndex[next]); pq.add(lToken[next]); } break; } } else { int neww = lFree; lFree = lNext[lFree]; lIndex[neww] = curIndex; lValue[neww] = v; lPrev[neww] = cur; lNext[neww] = next; lPrev[next] = lNext[cur] = neww; break; } } } } int last = lPrev[0]; int maxIndex = lValue[last] == 3 ? lIndex[last] + k : lIndex[last]; char bits0[] = new char[maxIndex + 1], bits1[] = new char[maxIndex + 1]; fill(bits0, '0'); fill(bits1, '0'); int firstBit0 = -1, firstBit1 = -1; for (int cur = lNext[0]; cur != 0; cur = lNext[cur]) { int curValue = lValue[cur]; int curIndex = curValue == 3 ? lIndex[cur] + k : lIndex[cur]; if ((curValue & 1) != 0) { bits0[maxIndex - curIndex] = '1'; firstBit0 = maxIndex - curIndex; } if ((curValue & 2) != 0) { bits1[maxIndex - curIndex] = '1'; firstBit1 = maxIndex - curIndex; } } out.println(new String(bits0, firstBit0, maxIndex - firstBit0 + 1)); out.print(new String(bits1, firstBit1, maxIndex - firstBit1 + 1)); } static int scanInt() throws IOException { return parseInt(scanString()); } static long scanLong() throws IOException { return parseLong(scanString()); } static String scanString() throws IOException { while (tok == null || !tok.hasMoreTokens()) { tok = new StringTokenizer(in.readLine()); } return tok.nextToken(); } static BufferedReader in; static PrintWriter out; static StringTokenizer tok; public static void main(String[] args) { try { in = new BufferedReader(new InputStreamReader(System.in)); out = new PrintWriter(System.out); solve(); in.close(); out.close(); } catch (Throwable e) { e.printStackTrace(); exit(1); } } }
Submission Info
Submission Time | |
---|---|
Task | F - Addition and Andition |
User | eatmore |
Language | Java8 (OpenJDK 1.8.0) |
Score | 2400 |
Code Size | 4869 Byte |
Status | AC |
Exec Time | 1077 ms |
Memory | 117840 KB |
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 2400 / 2400 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | sample01.txt, sample02.txt, sample03.txt |
All | sample01.txt, sample02.txt, sample03.txt, in01.txt, in02.txt, in03.txt, in04.txt, in05.txt, in06.txt, in07.txt, in08.txt, in09.txt, in10.txt, in11.txt, in12.txt, in13.txt, in14.txt, in15.txt, in16.txt, in17.txt, in18.txt, in19.txt, in20.txt, in21.txt, in22.txt, in23.txt, in24.txt, in25.txt, in26.txt, in27.txt, in28.txt, in29.txt, in30.txt, in31.txt, in32.txt, in33.txt, in34.txt, in35.txt, in36.txt, in37.txt, in38.txt, in39.txt, in40.txt, in41.txt, in42.txt, in43.txt, in44.txt, in45.txt, in46.txt, in47.txt, in48.txt, in49.txt, in50.txt, in51.txt, in52.txt, in53.txt, in54.txt, in55.txt, in56.txt, in57.txt, in58.txt, in59.txt, in60.txt, in61.txt, in62.txt, in63.txt, in64.txt, in65.txt, in66.txt, in67.txt, in68.txt, in69.txt, in70.txt, in71.txt, in72.txt, in73.txt, in74.txt, in75.txt, in76.txt, in77.txt, in78.txt, in79.txt, in80.txt, in81.txt, in82.txt, in83.txt, in84.txt, in85.txt, in86.txt, in87.txt, in88.txt, in89.txt, in90.txt, sample01.txt, sample02.txt, sample03.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
in01.txt | AC | 657 ms | 100528 KB |
in02.txt | AC | 654 ms | 106196 KB |
in03.txt | AC | 667 ms | 101236 KB |
in04.txt | AC | 648 ms | 101104 KB |
in05.txt | AC | 773 ms | 101940 KB |
in06.txt | AC | 696 ms | 103576 KB |
in07.txt | AC | 695 ms | 101728 KB |
in08.txt | AC | 739 ms | 100232 KB |
in09.txt | AC | 678 ms | 104364 KB |
in10.txt | AC | 684 ms | 102032 KB |
in11.txt | AC | 667 ms | 98524 KB |
in12.txt | AC | 669 ms | 103120 KB |
in13.txt | AC | 661 ms | 101248 KB |
in14.txt | AC | 668 ms | 101068 KB |
in15.txt | AC | 667 ms | 101012 KB |
in16.txt | AC | 1005 ms | 113476 KB |
in17.txt | AC | 1034 ms | 106068 KB |
in18.txt | AC | 967 ms | 107868 KB |
in19.txt | AC | 962 ms | 110072 KB |
in20.txt | AC | 1018 ms | 106404 KB |
in21.txt | AC | 965 ms | 107408 KB |
in22.txt | AC | 967 ms | 102148 KB |
in23.txt | AC | 1036 ms | 108840 KB |
in24.txt | AC | 1022 ms | 106768 KB |
in25.txt | AC | 951 ms | 107032 KB |
in26.txt | AC | 1053 ms | 117840 KB |
in27.txt | AC | 1013 ms | 111912 KB |
in28.txt | AC | 1029 ms | 108576 KB |
in29.txt | AC | 966 ms | 109212 KB |
in30.txt | AC | 1077 ms | 113888 KB |
in31.txt | AC | 357 ms | 86852 KB |
in32.txt | AC | 371 ms | 92544 KB |
in33.txt | AC | 357 ms | 85784 KB |
in34.txt | AC | 351 ms | 88744 KB |
in35.txt | AC | 349 ms | 91420 KB |
in36.txt | AC | 356 ms | 90148 KB |
in37.txt | AC | 374 ms | 87964 KB |
in38.txt | AC | 368 ms | 86440 KB |
in39.txt | AC | 354 ms | 83736 KB |
in40.txt | AC | 357 ms | 86820 KB |
in41.txt | AC | 365 ms | 90800 KB |
in42.txt | AC | 374 ms | 85356 KB |
in43.txt | AC | 359 ms | 89232 KB |
in44.txt | AC | 354 ms | 88924 KB |
in45.txt | AC | 369 ms | 91088 KB |
in46.txt | AC | 651 ms | 96900 KB |
in47.txt | AC | 824 ms | 98992 KB |
in48.txt | AC | 633 ms | 95196 KB |
in49.txt | AC | 637 ms | 101552 KB |
in50.txt | AC | 763 ms | 99644 KB |
in51.txt | AC | 687 ms | 99920 KB |
in52.txt | AC | 735 ms | 97604 KB |
in53.txt | AC | 749 ms | 95912 KB |
in54.txt | AC | 736 ms | 94604 KB |
in55.txt | AC | 630 ms | 93420 KB |
in56.txt | AC | 683 ms | 100288 KB |
in57.txt | AC | 670 ms | 100512 KB |
in58.txt | AC | 796 ms | 98184 KB |
in59.txt | AC | 667 ms | 95000 KB |
in60.txt | AC | 683 ms | 102668 KB |
in61.txt | AC | 748 ms | 97856 KB |
in62.txt | AC | 699 ms | 95320 KB |
in63.txt | AC | 622 ms | 97672 KB |
in64.txt | AC | 755 ms | 95760 KB |
in65.txt | AC | 730 ms | 96328 KB |
in66.txt | AC | 715 ms | 101132 KB |
in67.txt | AC | 634 ms | 93652 KB |
in68.txt | AC | 712 ms | 96016 KB |
in69.txt | AC | 678 ms | 96316 KB |
in70.txt | AC | 696 ms | 97604 KB |
in71.txt | AC | 498 ms | 94580 KB |
in72.txt | AC | 501 ms | 92412 KB |
in73.txt | AC | 499 ms | 93300 KB |
in74.txt | AC | 515 ms | 95300 KB |
in75.txt | AC | 490 ms | 96368 KB |
in76.txt | AC | 506 ms | 92952 KB |
in77.txt | AC | 502 ms | 94564 KB |
in78.txt | AC | 476 ms | 95648 KB |
in79.txt | AC | 490 ms | 92656 KB |
in80.txt | AC | 483 ms | 93732 KB |
in81.txt | AC | 485 ms | 90428 KB |
in82.txt | AC | 483 ms | 95368 KB |
in83.txt | AC | 520 ms | 90952 KB |
in84.txt | AC | 501 ms | 93028 KB |
in85.txt | AC | 455 ms | 96368 KB |
in86.txt | AC | 485 ms | 95208 KB |
in87.txt | AC | 497 ms | 92784 KB |
in88.txt | AC | 498 ms | 95084 KB |
in89.txt | AC | 498 ms | 92488 KB |
in90.txt | AC | 485 ms | 92604 KB |
sample01.txt | AC | 73 ms | 17748 KB |
sample02.txt | AC | 74 ms | 21076 KB |
sample03.txt | AC | 74 ms | 21332 KB |