比赛 2024国庆练习2 评测结果 AAAAAAAAAWWWWAAAAWWW
题目名称 战棋 最终得分 65
用户昵称 123 运行时间 0.135 s
代码语言 C++ 内存使用 3.39 MiB
提交时间 2024-10-05 18:18:06
显示代码纯文本
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int N=1010;
  4. int xx,aa,bb,cc,n,len1,len2,o=500,tot[N][11],q[N][11],q1=0,q2=0,ret1=0,ret2=0;
  5. struct node {
  6. int ll,rr,flag;
  7. } a[N][11],b[N][11];
  8. int get() {
  9. return xx=(xx*aa+bb)%cc;
  10. }
  11. void pushup(int now,int e)
  12. {
  13. if (b[now][e].flag<5)
  14. {
  15. b[now][e].ll+=20*(q[2][e]+q[7][e])-20*(b[now][e].flag==2 || b[now][e].flag==7);
  16. }
  17. else
  18. {
  19. b[now][e].ll+=20*(q[4][e]+q[9][e])-20*(b[now][e].flag==4 || b[now][e].flag==9);
  20. b[now][e].rr+=20*(q[4][e]+q[9][e])-20*(b[now][e].flag==4 || b[now][e].flag==9);
  21. }
  22. }
  23. void push(int nowa,int nowb)
  24. {
  25. b[nowa][1].rr-=b[nowb][2].ll;
  26. b[nowb][2].rr-=b[nowa][1].ll;
  27. if (b[nowa][1].rr<=0)
  28. {
  29. q1=nowa;
  30. for (int i=0;i<n;i++)
  31. {
  32. if (tot[i][1]==nowa)
  33. {
  34. for (int j=i;j<n;j++)
  35. {
  36. tot[j][1]=tot[j+1][1];
  37. }
  38. break;
  39. }
  40. }
  41. q[b[nowa][1].flag][1]--;
  42. len1--;
  43. }
  44. if (b[nowb][2].rr<=0)
  45. {
  46. q2=nowb;
  47. for (int i=0;i<n;i++)
  48. {
  49. if (tot[i][2]==nowb)
  50. {
  51. for (int j=i;j<n;j++)
  52. {
  53. tot[j][2]=tot[j+1][2];
  54. }
  55. break;
  56. }
  57. }
  58. q[b[nowb][2].flag][2]--;
  59. len2--;
  60. }
  61. }
  62. void pushdown(int now,int e)
  63. {
  64. if (b[now][e].flag==3 || b[now][e].flag==8)
  65. {
  66. for (int i=0;i<n;i++)
  67. {
  68. if (b[i][e].flag<6)
  69. {
  70. b[i][e].ll+=20;
  71. b[i][e].rr+=20;
  72. }
  73. }
  74. }
  75. if (b[now][e].flag>5)
  76. {
  77. for (int i=0;i<n;i++)
  78. {
  79. if (b[i][e].flag==5 || b[i][e].flag==10)
  80. {
  81. b[i][e].ll+=50;
  82. }
  83. }
  84. }
  85. }
  86. int main() {
  87. freopen("chess.in","r",stdin);
  88. freopen("chess.out","w",stdout);
  89. cin>>n>>xx>>aa>>bb>>cc;
  90. for (int i=0;i<n;i++)
  91. {
  92. char s,t;
  93. cin>>a[i][1].ll>>a[i][1].rr>>s>>t;
  94. a[i][1].flag=1;
  95. if (s=='P')
  96. {
  97. a[i][1].flag=6;
  98. }
  99. if (t=='L')
  100. {
  101. a[i][1].flag+=1;
  102. }
  103. if (t=='K')
  104. {
  105. a[i][1].flag+=2;
  106. }
  107. if (t=='C')
  108. {
  109. a[i][1].flag+=3;
  110. }
  111. if (t=='G')
  112. {
  113. a[i][1].flag+=4;
  114. }
  115. }
  116. for (int i=0;i<n;i++)
  117. {
  118. char s,t;
  119. cin>>a[i][2].ll>>a[i][2].rr>>s>>t;
  120. a[i][2].flag=1;
  121. if (s=='P')
  122. {
  123. a[i][2].flag=6;
  124. }
  125. if (t=='L')
  126. {
  127. a[i][2].flag+=1;
  128. }
  129. if (t=='K')
  130. {
  131. a[i][2].flag+=2;
  132. }
  133. if (t=='C')
  134. {
  135. a[i][2].flag+=3;
  136. }
  137. if (t=='G')
  138. {
  139. a[i][2].flag+=4;
  140. }
  141. }
  142. while (o--)
  143. {
  144. for (int i=1;i<=10;i++)
  145. {
  146. q[i][1]=q[i][2]=0;
  147. }
  148. for (int i=0;i<n;i++)
  149. {
  150. b[i][1].ll=a[i][1].ll,b[i][1].rr=a[i][1].rr,b[i][1].flag=a[i][1].flag;
  151. b[i][2].ll=a[i][2].ll,b[i][2].rr=a[i][2].rr,b[i][2].flag=a[i][2].flag;
  152. tot[i][1]=tot[i][2]=i;
  153. q[b[i][1].flag][1]++,q[b[i][2].flag][2]++;
  154. }
  155. for (int i=0;i<n;i++)
  156. {
  157. if (b[i][1].flag<6)
  158. {
  159. b[i][1].ll+=20*(q[2][1]+q[7][1])-20*(b[i][1].flag==2 || b[i][1].flag==7);
  160. }
  161. if (b[i][2].flag<6)
  162. {
  163. b[i][2].ll+=20*(q[2][2]+q[7][2])-20*(b[i][2].flag==2 || b[i][2].flag==7);
  164. }
  165. }
  166. len1=n,len2=n;
  167. while (len1 && len2)
  168. {
  169. q1=-1,q2=-1;
  170. int s=get()%len1;
  171. int t=get()%len2;
  172. pushup(tot[s][1],1),pushup(tot[t][2],2);
  173. push(tot[s][1],tot[t][2]);
  174. if (q1!=-1)
  175. {
  176. pushdown(q1,1);
  177. }
  178. if (q2!=-1)
  179. {
  180. pushdown(q2,2);
  181. }
  182. }
  183. ret1+=len1,ret2+=len2;
  184. }
  185. cout<<ret1<<" "<<ret2<<endl;
  186. }