当前位置:   article > 正文

2021 RoboCom 世界机器人开发者大赛-本科组(决赛)7-1绿色围栏(模拟)_robocom编程比赛真题在哪可以做

robocom编程比赛真题在哪可以做

题目链接:PTA | 程序设计类实验辅助教学平台

样例输入:

  1. 14 5
  2. 2 1 1 4 3 5 2 6 -1 4 0 2 -1 0

样例输出:

  1. 0 0
  2. 2 1
  3. 5 3
  4. 6 -1
  5. 2 0

分析:第一个需要注意的就是他给的输入输出并不是直接给出点坐标,但是容易发现的一个地方就是,第i个给出的点有两种情况,如果i是奇数,那么给出的就是纵坐标,否则就是横坐标,假如给出的是纵坐标,那么这个点的横坐标和上一个点的横坐标就是相同的,如果给出的是横坐标,那么这个点的纵坐标和上一个点的纵坐标就是相同的。处理完输入之后就是一个简单的模拟了,需要注意的一个坑点就是如果最后恰好到(0,0)那么不用再进行输出,这个地方需要特殊判断一下。

下面是代码:
 

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<map>
  6. #include<queue>
  7. #include<vector>
  8. #include<cmath>
  9. using namespace std;
  10. const int N=1e4+10;
  11. int x[N],y[N];
  12. int main()
  13. {
  14. int n,l;
  15. cin>>n>>l;
  16. for(int i=1;i<=n;i++)
  17. {
  18. if(i&1)
  19. {
  20. scanf("%d",&y[i]);
  21. x[i]=x[i-1];
  22. }
  23. else
  24. {
  25. scanf("%d",&x[i]);
  26. y[i]=y[i-1];
  27. }
  28. }
  29. x[n+1]=0;y[++n]=0;
  30. int X=0,Y=0,ll=l;
  31. printf("0 0");
  32. for(int i=1;i<=n;i++)
  33. {
  34. int t=abs(x[i]-X)+abs(Y-y[i]);
  35. while(t>ll)
  36. {
  37. if(X==x[i])
  38. {
  39. if(y[i]-Y>0)
  40. {
  41. t-=ll;
  42. Y+=ll;
  43. ll=l;
  44. }
  45. else
  46. {
  47. t-=ll;
  48. Y-=ll;
  49. ll=l;
  50. }
  51. }
  52. else
  53. {
  54. if(x[i]-X>0)
  55. {
  56. t-=ll;
  57. X+=ll;
  58. ll=l;
  59. }
  60. else
  61. {
  62. t-=ll;
  63. X-=ll;
  64. ll=l;
  65. }
  66. }
  67. if(X||Y)
  68. printf("\n%d %d",X,Y);
  69. }
  70. if(X==x[i])
  71. {
  72. ll-=abs(Y-y[i]);
  73. Y=y[i];
  74. }
  75. else
  76. {
  77. ll-=abs(X-x[i]);
  78. X=x[i];
  79. }
  80. if(!ll)
  81. {
  82. if(X||Y)
  83. printf("\n%d %d",X,Y);
  84. ll=l;
  85. }
  86. }
  87. return 0;
  88. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/910285
推荐阅读
相关标签
  

闽ICP备14008679号