• 10881 - Piotr‘s Ants (UVA)


    题目链接:Online Judge

    根据刘汝佳的解法的思路,我的代码如下:

    1. #include
    2. #include
    3. #include
    4. const int maxn = 10001;
    5. struct ant{
    6. int id;
    7. int loc;
    8. int dir;
    9. };
    10. bool cmp(const ant &a, const ant &b){
    11. return a.loc < b.loc;
    12. }
    13. bool cmp1(const ant &a, const ant &b){
    14. return a.id < b.id;
    15. }
    16. ant a[maxn], b[maxn];
    17. int order[maxn];
    18. int N, L, T, n;
    19. char ch;
    20. std::string direction[3] = {"L", "Turning", "R"};
    21. int main(){
    22. scanf("%d", &N);
    23. for(int kase = 1; kase <= N; ++kase){
    24. printf("Case #%d:\n", kase);
    25. scanf("%d %d %d", &L, &T, &n);
    26. for(int i = 0; i < n; ++i){
    27. scanf("%d %c", &a[i].loc, &ch);
    28. a[i].id = i;
    29. a[i].dir = ch == 'L' ? -1 : 1;
    30. }
    31. std::sort(a, a + n, cmp);
    32. for(int i = 0; i < n; ++i){
    33. order[i] = a[i].id;
    34. b[i].loc = a[i].loc + a[i].dir * T;
    35. b[i].dir = a[i].dir;
    36. }
    37. std::sort(b, b + n, cmp);
    38. for(int i = 0; i < n; ++i){
    39. b[i].id = order[i];
    40. if(i != n - 1 && b[i].loc == b[i + 1].loc){
    41. b[i].dir = 0;
    42. b[i + 1].dir = 0;
    43. }
    44. }
    45. std::sort(b, b + n, cmp1);
    46. for(int i = 0; i < n; ++i){
    47. if(b[i].loc < 0 || b[i].loc > L){
    48. printf("Fell off\n");
    49. } else{
    50. printf("%d %s\n", b[i].loc, direction[b[i].dir + 1].c_str());
    51. }
    52. }
    53. printf("\n");
    54. }
    55. return 0;
    56. }

    我起先的代码如下,样例答案是对的,但提交时显示超时:

    1. #include
    2. #include
    3. #include
    4. #include
    5. struct ant{
    6. int id;
    7. int loc;
    8. int direction;
    9. bool turnFlag = false;
    10. };
    11. int N, L, T, n, loc;
    12. char ch;
    13. std::deque de;
    14. std::set<int> fellOff;
    15. bool cmp(const ant &a, const ant &b){
    16. return a.loc < b.loc;
    17. }
    18. bool cmp1(const ant &a, const ant &b){
    19. return a.id < b.id;
    20. }
    21. int main(){
    22. scanf("%d", &N);
    23. for(int kase = 1; kase <= N; ++kase){
    24. scanf("%d %d %d", &L, &T, &n);
    25. de.clear();
    26. de.resize(n);
    27. for(int i = 0; i < n; ++i){
    28. scanf("%d %c", &de[i].loc, &ch);
    29. de[i].id = i;
    30. de[i].direction = ch == 'L' ? -1 : 1;
    31. }
    32. sort(de.begin(), de.end(), cmp);
    33. for(int i = 0; i < T; ++i){
    34. if(de[0].loc == 0 && de[0].direction == -1){
    35. fellOff.insert(de[0].id);
    36. de.pop_front();
    37. }
    38. if(de.back().loc == L && de.back().direction == 1){
    39. fellOff.insert(de.back().id);
    40. de.pop_back();
    41. }
    42. for(int j = 0; j < de.size(); ++j){
    43. if(de[j].direction == -1){
    44. de[j].loc--;
    45. } else{
    46. if(j == de.size() - 1){
    47. de[j].loc++;
    48. } else if(de[j + 1].loc > de[j].loc + 2 || de[j + 1].direction == 1){
    49. de[j].loc++;
    50. } else{
    51. if(de[j + 1].loc == de[j].loc + 2){
    52. de[j].loc++;
    53. de[j + 1].loc--;
    54. }
    55. de[j].direction = -1;
    56. de[j + 1].direction = 1;
    57. j++;
    58. }
    59. }
    60. }
    61. }
    62. for(int i = 0; i < de.size(); ++i){
    63. if((i != de.size() - 1 && de[i + 1].loc == de[i].loc) || (i != 0 && de[i - 1].loc == de[i].loc)){
    64. de[i].turnFlag = true;
    65. }
    66. }
    67. sort(de.begin(), de.end(), cmp1);
    68. int cur = 0;
    69. printf("Case #%d:\n", kase);
    70. for(int i = 0; i < n; ++i){
    71. if(fellOff.find(i) != fellOff.end()){
    72. printf("Fell off\n");
    73. } else{
    74. printf("%d ", de[cur].loc);
    75. if(de[cur].turnFlag){
    76. printf("Turning\n");
    77. } else{
    78. printf("%c\n", de[cur].direction == -1 ? 'L' : 'R');
    79. }
    80. cur++;
    81. }
    82. }
    83. printf("\n");
    84. fellOff.clear();
    85. }
    86. return 0;
    87. }

  • 相关阅读:
    Spring Boot中实现发送文本、带附件和HTML邮件
    【项目调优】项目从EhCache缓存变为redis之后,加载菜单变得极其缓慢
    c# 同步异步锁
    【JavaSE】数据类型与变量
    传统燃油车迎来“诺基亚时刻”,油站行业或将加速上演“大逃亡”
    应用在城市井盖积水检测中的深水液位传感芯片
    Nanoframework 操作单片机蓝牙配置WIFI的案例
    MR混合现实情景实训教学系统模拟高空作业情景实训教学
    基于51单片机的智能鞋柜消毒柜
    见微知著:从企业售后技术支持看云计算发展
  • 原文地址:https://blog.csdn.net/linh2006/article/details/132622301