• 512 - Spreadsheet Tracking (UVA)


    题目链接如下:

    Online Judge

    这道题还是很繁琐的,花了我不少时间……(然后看到别人的评价“水题”,就超级崩溃……)

    刘汝佳用了两种方法来解,这里用的就是他的方法,还是非常巧妙的。 https://www.cnblogs.com/mofushaohua/p/7789533.html

    我的解法比较笨拙,就是直接模拟,代码如下:

    1. #include
    2. #include
    3. #include
    4. const int maxx = 51;
    5. int r, c, n, kase, query, u, v, s, t, sz, newr, newc, p, temp;
    6. int sp[maxx][maxx];
    7. int row[maxx * maxx], col[maxx * maxx];
    8. char c1, c2;
    9. int main(){
    10. kase = 0;
    11. while(scanf("%d %d", &r, &c) == 2 && r && c){
    12. if(kase){
    13. printf("\n");
    14. }
    15. printf("Spreadsheet #%d\n", ++kase);
    16. newr = r;
    17. newc = c;
    18. scanf("%d", &n);
    19. std::fill(sp[0], sp[0] + maxx * maxx, 0);
    20. std::fill(row, row + maxx * maxx, 0);
    21. std::fill(col, col + maxx * maxx, 0);
    22. for(int i = 1; i <= r; ++i){
    23. for(int j = 1; j <= c; ++j){
    24. sp[i][j] = (i - 1) * c + j;
    25. }
    26. }
    27. while(n--){
    28. getchar();
    29. scanf("%c%c", &c1, &c2);
    30. if(c1 == 'E'){
    31. scanf("%d %d %d %d", &u, &v, &s, &t);
    32. std::swap(sp[u][v], sp[s][t]);
    33. } else{
    34. scanf("%d", &sz);
    35. std::vector<int> vec(sz);
    36. for(int i = 0; i < sz; ++i){
    37. scanf("%d", &vec[i]);
    38. }
    39. sort(vec.begin(), vec.end());
    40. if(c1 == 'D'){
    41. p = 0;
    42. if(c2 == 'C'){
    43. newc -= sz;
    44. for(int j = vec[0]; j <= newc; ++j){
    45. while(p < sz && j + p == vec[p]){
    46. p++;
    47. }
    48. for(int i = 1; i <= newr; ++i){
    49. sp[i][j] = sp[i][j + p];
    50. }
    51. }
    52. } else{
    53. newr -= sz;
    54. for(int i = vec[0]; i <= newr; ++i){
    55. while(p < sz && i + p == vec[p]){
    56. p++;
    57. }
    58. for(int j = 1; j <= newc; ++j){
    59. sp[i][j] = sp[i + p][j];
    60. }
    61. }
    62. }
    63. } else{
    64. p = sz;
    65. if(c2 == 'C'){
    66. newc += sz;
    67. for(int j = newc; j >= vec[0]; --j){
    68. if(p > 0 && j - p < vec[p - 1]){
    69. p--;
    70. if(j <= maxx - 1){
    71. for(int i = 1; i <= newr; ++i){
    72. sp[i][j] = 0;
    73. }
    74. }
    75. } else{
    76. if(j <= maxx - 1){
    77. for(int i = 1; i <= newr; ++i){
    78. sp[i][j] = sp[i][j - p];
    79. }
    80. }
    81. }
    82. }
    83. newc = std::min(maxx - 1, newc);
    84. } else{
    85. newr += sz;
    86. for(int i = newr; i >= vec[0]; --i){
    87. if(p > 0 && i - p < vec[p - 1]){
    88. p--;
    89. if(i <= maxx - 1){
    90. for(int j = 1; j <= newc; ++j){
    91. sp[i][j] = 0;
    92. }
    93. }
    94. } else{
    95. if(i <= maxx - 1){
    96. for(int j = 1; j <= newc; ++j){
    97. sp[i][j] = sp[i - p][j];
    98. }
    99. }
    100. }
    101. }
    102. newr = std::min(maxx - 1, newr);
    103. }
    104. }
    105. }
    106. }
    107. for(int i = 1; i <= newr; ++i){
    108. for(int j = 1; j <= newc; ++j){
    109. if(sp[i][j]){
    110. row[sp[i][j]] = i;
    111. col[sp[i][j]] = j;
    112. }
    113. }
    114. }
    115. scanf("%d", &query);
    116. while(query--){
    117. scanf("%d %d", &u, &v);
    118. temp = (u - 1) * c + v;
    119. if(row[temp] == 0){
    120. printf("Cell data in (%d,%d) GONE\n", u, v);
    121. } else{
    122. printf("Cell data in (%d,%d) moved to (%d,%d)\n", u, v, row[temp], col[temp]);
    123. }
    124. }
    125. }
    126. return 0;
    127. }

  • 相关阅读:
    Maven
    Java面向对象回顾
    基于Python+flask+sqlite+bootstrap框架开发的后台管理系统
    大灰狼远程管理[SVIP3会员版]易语言源码
    丁鹿学堂:promise深入解读(一)
    【深入浅出 Yarn 架构与实现】4-6 RM 行为探究 - 申请与分配 Container
    对数据“投入”却没有“产出”?听听 Gartner 的最新分析
    用cmd命令进行磁盘清理(主要是系统盘)
    前端八股文-类型判断typeof,instanceof,类式,构造函数,组合,原型式,寄生式继承,手写new、bind、call、apply
    nvidia-docker安装
  • 原文地址:https://blog.csdn.net/linh2006/article/details/132977903