经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C » 查看文章
NOIP模拟赛D2T1自己的解题思路
来源:cnblogs  作者:Scatter  时间:2018/10/21 20:27:07  对本文有异议

T1题目在此:

数轴上有n个球,每个球直径为1,第 ii 个球的左端点为pi即占据了数轴上[pi,pi+1][pi,pi+1])。在 P位置有一堵墙。
有q个操作,每次要么以x位置为左端点放一个新球(如果有了就不管),
要么把最左边的球往右推。一个球碰到另一个的时候,旧球停下来,新球继续滚。球碰到墙的时候就停下来。
最后你需要输出所有球的位置。

然后开始想:我的妈这不是一道水题么;然后用笔推算了一阵子,得出自己的结论:

  1. 链表可以快速插入一个元素;
  2. 为了快速放入元素,使用二分查找法,因为链表在未连接之前已排好序,找到之后插入;
  3. 操作2直接让其右端点等于下一个的左端点即可,在链表最后一位的必定撞墙

  然后突然发现自己不会写链表QAQ,凉了

于是打暴力QAQ绝对不满分,还可能爆零的那种(\\\A\\\)

  1. #include<iostream>
  2. #include<algorithm>
  3. using namespace std;
  4. const int N=500010;
  5. struct ball{
  6. double l,r;
  7. ball *next;
  8. }b[N];
  9. int n,q,p;
  10. int pp=0;
  11. bool cmp(ball b1,ball b2);
  12. void insertball(int l,int r,int x);
  13. void simulate();
  14. int main()
  15. {
  16. cin>>n>>q>>p;
  17. for(int i=1;i<=n;i++)
  18. {
  19. cin>>b[i].l;
  20. b[i].r=b[i].l+1;
  21. }
  22. sort(b+1,b+1+n,cmp);
  23. for(int i=1;i<=q;i++)
  24. {
  25. int t;
  26. cin>>t;
  27. switch(t)
  28. {
  29. case 1:
  30. int x;
  31. cin>>x;
  32. pp++;
  33. b[n+pp].l=x;
  34. b[n+pp].r=x+1;
  35. sort(b+1,b+1+n+pp,cmp);
  36. break;
  37. case 2:
  38. simulate();
  39. break;
  40. }
  41. }
  42. for(int i=1;i<=n+pp;i++)
  43. {
  44. cout<<b[i].l<<" ";
  45. }
  46. cout<<endl;
  47. return 0;
  48. }
  49. bool cmp(ball b1,ball b2)
  50. {
  51. return b1.r<b2.r;
  52. }
  53. void simulate()
  54. {
  55. for(int i=1;i<=n+pp-1;i++)
  56. {
  57. b[i].r=b[i+1].l;
  58. b[i].l=b[i].r-1;
  59. }
  60. b[n+pp].r=p;
  61. b[n+pp].l=p-1;
  62. }

 等我找到了正解之后再扔上来QwQ

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号