记录编号 416501 评测结果 AAAATTTTTT
题目名称 [HZOI 2016]白雪皑皑 最终得分 40
用户昵称 GravatarJustWB 是否通过 未通过
代码语言 C++ 运行时间 6.365 s
提交时间 2017-06-21 20:56:54 内存使用 118.57 MiB
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<queue>
  5. const int maxn=1e6+5;
  6. const int maxm=1e7+5;
  7. using namespace std;
  8. struct zjg
  9. {
  10. int l,r;
  11. int color;
  12. bool operator < (const zjg you)const{return l<you.l;}
  13. }me[maxm];
  14. int n,m,p,q,c;
  15. int al,bl,ar,br,ac,bc;
  16. int N[maxn];
  17. priority_queue<zjg> heap;
  18. void water(int now,int l,int r);
  19. int main()
  20. {
  21. freopen("winter.in","r",stdin);
  22. freopen("winter.out", "w", stdout);
  23. scanf("%d%d%d%d",&n,&m,&p,&q);
  24. for(int i=1;i<=m;i++)
  25. {
  26. int a=(i*p+q)%n+1,b=(i*q+p)%n+1;
  27. me[i].l=min(a,b);
  28. me[i].r=max(a,b);
  29. // printf("%d %d\n",me[i].l,me[i].r);
  30. }
  31. for(int i=1;i<=m;i++){c=i;water(i+1,me[i].l,me[i].r);}
  32. bl=-heap.top().l;br=heap.top().r;bc=heap.top().color;
  33. al=-1;ar=1;ac=0;
  34. heap.pop();
  35. while(!heap.empty())
  36. {
  37. if(al==-1)
  38. {
  39. for(int i=ar+1;i<bl;i++)printf("%d\n",ac);
  40. al=bl,ar=br,ac=bc;
  41. bl=-heap.top().l;br=heap.top().r;bc=heap.top().color;
  42. continue;
  43. }
  44. heap.pop();
  45. for(int i=al;i<=ar;i++)printf("%d\n",ac);
  46. for(int i=ar+1;i<bl;i++)printf("0\n");
  47. al=bl;ar=br;ac=bc;
  48. if(heap.empty())break;
  49. bl=-heap.top().l;br=heap.top().r;bc=heap.top().color;
  50. }
  51. if(al==bl&&ar==br&&ac==bc)
  52. {
  53. for(int i=bl;i<=br;i++)printf("%d\n",bc);
  54. for(int i=br+1;i<=n;i++)printf("0\n");
  55. return 0;
  56. }
  57. for(int i=al;i<=ar;i++)printf("%d\n",ac);
  58. for(int i=ar+1;i<bl;i++)printf("0\n");
  59. for(int i=bl;i<=br;i++)printf("%d\n",bc);
  60. for(int i=br+1;i<=n;i++)printf("0\n");
  61. return 0;
  62. }
  63. void water(int now,int l,int r)
  64. {
  65. for(int i=now;i<=m;i++)
  66. {
  67. if(l>r)return;
  68. if(l<me[i].l&&r>=me[i].l&&r<me[i].r)r=me[i].l-1;
  69. else if(l<=me[i].r&&r>me[i].r&&l>me[i].l)l=me[i].r+1;
  70. else if(l>=me[i].l&&r<=me[i].r)return;
  71. else if(l<=me[i].l&&r>=me[i].r)
  72. {
  73. water(i+1,l,me[i].l-1);
  74. water(i+1,me[i].r+1,r);
  75. return;
  76. }
  77. }
  78. if(l>r)return;
  79. zjg wb;
  80. wb.l=-l;wb.r=r;wb.color=c;
  81. heap.push(wb);
  82. }
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.