87
WUPC2012 問題解説

WUPC2012

Embed Size (px)

DESCRIPTION

早稲田大学プログラミングコンテスト(WUPC)2012の問題解説

Citation preview

  • 1. WUPC2012

2. or ICPC 3. # SRM div2A 250B 300C 400D 500E 700F 1000 4. Problem A 5. mada mbdb 3/1 3/10 9 2/1 3/1 29 6. (mada ma()) + (X : ma < X < mb) + (mb1 mbdb) 7. ()// int[] max = {0, 31, 29, 31, 30, 31, 3031, 31, 30, 31, 30, 31};if (ma == mb) {return db da;} else {int ans = (max[ma] - da) + (db - 1);for (int m = ma + 1 ; m abcdef 10. 22 A B A + B A < A + B () 2 A A 11. 2 (~, zzzzz) 2 N L O(N2L) 12. O(N2L) N : 50 L : 50 + 50 = 100 max(N2L) = 50 * 50 * 100 = 250,000 [1] : 1 1,000,000 : 10,000,000 : 100,000,000 : [1] p202010 13. ffffffa f fg fffa fff 14. Java a.compareTo(b) : a < b C++ a < b C strcmp(a, b) : a < b 15. Problem C 16. : 17. OK -1 18. 19. Time = 0 20. Time = 1 21. Time = 2 22. Time = 3 23. Time = 4 24. Time = 5 25. Time = 6 26. Time = 7 27. Time = 8 28. 2 1 O(NM) 500 * 500 = 250,000 500,000 29. int time = 0;bool[][] search; search[sy][sx] = true;bool[][] visited; visited[sy][sx] = true;while (true) {bool[][] next_search;time += 1;for (int i = 0 ; i < H ; i++) {for (int j = 0 ; j < W ; j++) {if (!search[i][j]) continue;// 4// visited or continue// next_search true }}//}search = next_search; 1 30. int time = 0;500 * 500 = true;bool[][] search; search[sy][sx] = 250,000bool[][] visited; visited[sy][sx] = true;while (true) {bool[][] next_search;time += 1;for (int i = 0 ; i < H ; i++) {for (int j = 0 ; j < W ; j++) {if (!search[i][j]) continue;// 4// visited or continue// next_search true }}//}search = next_search; 1 31. ######################################################SG.................................................####################################################.##...................................................##.####################################################...................................................####################################################.##...................................................##.###################################################()#.####################################################..................................................C###################################################### 32. Java : ArrayList C++ : vector Java : ArrayBlockingQueue C++ : queue 33. int time = 0;bool[][] visited; visited[sy][sx] = true;List marks; marks.add(sy*1000+sx);while (true) {time += 1;List next_marks;for (int state in marks)int i = state / 1000;int j = state % 1000;if (!search[i][j]) continue;// 4// visited or continue// next_marks }}}marks = next_marks;2 34. Problem D 35. or :389476 36. max : sample 3 2 37. 1 : bn,1 bn,2 bn,n bn,1 bn,2 bn,nbn+1,1bn+1,n bn+1,n+1bn,i = ni 38. 1 : bn,I = max(bn-1,I, bn-1,i-1) + an,i b1,1 = a1,1 : 39. 2 : (n,i) (n+1,i) (n+1,i+1) + an,I N = 2425 40. 2 : /function rec(int n, int i) {if (n >= N+1) return 0;int down = rec(n+1, i) + a[n][i];int right = rec(n+1, i+1) + a[n][i];int ret = max(down, right);return ret;} 41. 2 : f(1,1) f(2,1)f(2,2) f(3,1)f(3,2)f(3,2)f(3,3)f(4,1)f(4,2)f(4,2)f(4,3)f(4,2)f(4,3)f(4,3)f(4,4)f(5,2) f(5,3)f(5,3)f(5,4)f(5,3)f(5,4)f(5,2) f(5,3) f(5,2)f(5,3)f(5,3)f(5,4) 42. 2 : : 43. 2 : /int[][] memo; // -1function rec(int n, int i) {if (n >= N+1) return 0;if (memo[n][i] != -1) return memo[n][i];int down = rec(n+1, i) + a[n][i];int right = rec(n+1, i+1) + a[n][i];int ret = max(down, right);memo[n][i] = ret;return ret;} 44. Problem E 45. 0N-1 4 7 N = 6, M = 71 1 1 44 2 03 52 12 1 46. () : O(MlogN) () : O(N^3) () 47. INF() 0 INF INF114 1 4 2002 3151INF INF 2INF 48. 1 INF114 1 4 200 23 1512 INF 2INF 49. 1 31 1 4 1 4 200 23 1512 323 50. {} {,} 1 31 1 4 1 4 200 23 1512 323 51. 1,0 5,0 1,1 5,1 0,0 1,2 3,0 5,2 0,1 3,1 0,2 3,2 2,0 3,3 5,7 2,1 3,4 3,5 52. Nmax = 1,000 1,000 * 1,000,000 = 1,000,000,000 53. 4 47 54. 4 A 36 40 4 A -> B (8) B 44 B 48 (4A) 55. 41,05,01,15,10,0 1,2 3,05,20,1 1,3 3,15,30,2 1,4 3,20,3 2,0 3,35,70,4 2,1 3,40,5 2,2 3,52,32,4 56. 41,05,01,15,10,0 1,2 3,05,20,1 1,3 3,15,30,2 3,20,3 2,0 3,32,12,22,3{,4} 57. 4 {,4} = {N-1, 0} 77 {,7} = {N-1, 0} 28 (=LCM(4,7)) 58. Problem F 59. 4 NG 60. 61. :-( 62. :-( 63. :-) 64. (N10,000) 4N100 100^4 = 100,000,000 O(N^2) 65. 0 xi 9990 yi 999 : 2 2 (xa, ya), (xb, yb) 2 (xa, yb), (xb, ya) 2O(1) O(1) 66. a[x][y] (0, 0)-(x, y) 1. a0 2. (xi, yi) a[xi][yi] = 1 3. 4. 67. 68. +1+1+1+1 +1 +1 +1 +1 +1 +1 +1 +1 69. +1+1+1+1 +1 +1 +1 +1 +1 +1 +1 +1 70. +1+1+1 +1 +1+1 +1 +1 1 1 2 2 3 3 44 4 71. +1+1 +1+1 +1+1 +1 +1 1 1 2 2 3 3 44 4 72. +1+1 +1+1 +1 1 1 22 3 ... 1 1 2 2 3 3 44 4 73. 1 1 1 1 2 ... 1 1 1 1 2 22 3 ... 1 12 2 3 ... 1 1 2 2 3 34 4 4 74. 1 1 1 1 2 ... 1 1 1 1 2 22 3 ... 1 12 2 3 ... 1 1 2 2 3 34 4 4 75. 1 1 1 1 1 2 ... 1 1 1 1 1 2 22 3 ... 1 1 12 2 3 ... 1 1 1 2 2 3 34 4 4 76. 1 1 2 6 6 6 9 12 ... 1 1 3 3 5 5 8 8 8 10 ... 1 2 4 4 6 6 7 ... 1 4 1 1 2 2 3 3 4 4 4 77. 1 1 2 6 6 6 9 12 1 1 3 3 5 5 8 8 8 10 6 6 7 4 4 4 4 78. 1 1 2 6 6 6 9 12 1 1 3 3 5 5 8 8 8 10 1 2 4 4 6 6 7 1 4 1 1 2 2 3 3 4 4 4 79. 1 1 2 6 6 6 9 12 1 1 3 3 5 5 8 8 8 10 1 2 4 4 6 6 7 1 4 1 1 2 2 3 3 4 4 4 80. 5 8 4 6 81. 5 8 4 6 82. 5 8 =- -+ 4 6 =856+4 =1 83. N2 O(1) O(N^2) 10,000^2 = 100,000,000 5 84. ACM/ICPC, Topcoder, 85. ACM/ICPC 31 7/2 : 11 : 5 : (5/17)2012World Final 11 86. Topcoder SRM (2) 87. 9:30 63 5 05-23()