比赛 2024暑假C班集训C 评测结果 WWWWWWWWWW
题目名称 W&B 最终得分 0
用户昵称 wzh0425 运行时间 2.242 s
代码语言 C++ 内存使用 4.11 MiB
提交时间 2024-07-12 09:18:09
显示代码纯文本
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int T,n,zm[100005],siz[100005],zs[5],ans,zm2[100005],siz2[100005],gs,t;
  4. int gcd(int a,int b){
  5. if (a%b==0) return b;
  6. return gcd(b,a%b);
  7. }
  8. int main(){
  9. freopen("silly.in","r",stdin);
  10. freopen("silly.out","w",stdout);
  11. scanf("%d",&T);
  12. while (T--){
  13. gs=0,t=0,ans=0;
  14. memset(zs,0,sizeof(zs));
  15. scanf("%d",&n);
  16. for (int i=1;i<=n;i++){
  17. scanf("%d",&siz[i]);
  18. char s;
  19. scanf("%s",&s);
  20. if (s=='W'){
  21. zm[i]=1,zs[1]+=siz[i];
  22. if (gs==1){
  23. siz2[t]+=siz[i];
  24. }else{
  25. gs=1;
  26. zm2[++t]=1;
  27. siz2[t]=siz[i];
  28. }
  29. }
  30. else{
  31. zm[i]=2,zs[2]+=siz[i];
  32. if (gs==2){
  33. siz2[t]+=siz[i];
  34. }else{
  35. gs=2;
  36. zm2[++t]=2;
  37. siz2[t]=siz[i];
  38. }
  39. }
  40. }
  41. if (zs[1]==0){
  42. printf("%d\n",zs[2]);
  43. continue;
  44. }
  45. if (zs[2]==0){
  46. printf("%d\n",zs[1]);
  47. continue;
  48. }
  49. int t1=zs[1]/gcd(zs[1],zs[2]);
  50. int t2=zs[2]/gcd(zs[1],zs[2]);
  51. int ry=0,bl=0,flag=0;
  52. for (int i=1;i<=t;i++){
  53. if (zm2[i]==1){
  54. ry=bl*t1;
  55. if ((siz2[i]-ry)%t1!=0){
  56. printf("1\n");
  57. flag=1;
  58. break;
  59. }else{
  60. bl=(siz2[i]-ry)/t1;
  61. if (bl!=0) ans++;
  62. }
  63. }else{
  64. ry=bl*t2;
  65. if ((siz2[i]-ry)%t2!=0){
  66. printf("1\n");
  67. flag=1;
  68. break;
  69. }else{
  70. bl=(siz2[i]-ry)/t2;
  71. if (bl!=0) ans++;
  72. }
  73. }
  74. }
  75. if (flag==0){
  76. printf("%d\n",ans);
  77. }
  78. }
  79. return 0;
  80. }