比赛 |
2024国庆练习2 |
评测结果 |
AAAAAAAAAWWWWAAAAWWW |
题目名称 |
战棋 |
最终得分 |
65 |
用户昵称 |
彭欣越 |
运行时间 |
0.155 s |
代码语言 |
C++ |
内存使用 |
3.38 MiB |
提交时间 |
2024-10-05 17:46:28 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int xx,AA,BB,CC,N1,N2;
int Getid() {return xx=(xx * AA + BB) % CC;}
ll n,res1,res2,p1,p2,p3,p4;
struct node {
ll a,b;
char s1,s2;
}f1[1010],f2[1010],a1[1010],a2[1010];
void f (int x,int y) {
for (int i=1;i<=n;i++) {
if (f1[i].b>0) {
x--;
if (x==0) {
x=i;
break;
}
}
}
for (int i=1;i<=n;i++) {
if (f2[i].b>0) {
y--;
if (y==0) {
y=i;
break;
}
}
}
if (f1[x].s1=='P') {
if (f1[x].s2=='C') {
f1[x].a+=20*(p1-1);
f1[x].b+=20*(p1-1);
}else{
f1[x].a+=20*p1;
f1[x].b+=20*p1;
}
}
if (f2[y].s1=='P') {
if (f2[y].s2=='C') {
f2[y].a+=20*(p2-1);
f2[y].b+=20*(p2-1);
}else{
f2[y].a+=20*p2;
f2[y].b+=20*p2;
}
}
f1[x].b-=f2[y].a;
f2[y].b-=f1[x].a;
if (f1[x].b<=0) {
N1--;
if (f1[x].s2=='C') p1--;
if (f1[x].s2=='K') {
for (int i=1;i<=n;i++) {
if (f1[i].b>0&&f1[i].s1=='M') {
f1[i].a+=20;
f1[i].b+=20;
}
}
}
if (f1[x].s1=='P') {
for (int i=1;i<=n;i++) {
if (f1[i].s2=='G'&&f1[i].b>0) {
f1[i].a+=50;
}
}
}
}
if (f2[y].b<=0) {
N2--;
if (f2[y].s2=='C') p2--;
if (f2[y].s2=='K') {
for (int i=1;i<=n;i++) {
if (f2[i].b>0&&f2[i].s1=='M') {
f2[i].a+=20;
f2[i].b+=20;
}
}
}
if (f2[y].s1=='P') {
for (int i=1;i<=n;i++) {
if (f2[i].s2=='G'&&f2[i].b>0) {
f2[i].a+=50;
}
}
}
}
}
int main () {
freopen("chess.in","r",stdin);
freopen("chess.out","w",stdout);
cin >> n >> xx >> AA >> BB >> CC;
for (int i=1;i<=n;i++) {
cin >> a1[i].a >> a1[i].b >> a1[i].s1 >> a1[i].s2;
if (a1[i].s2=='C') p3++;
}
for (int i=1;i<=n;i++) {
cin >> a2[i].a >> a2[i].b >> a2[i].s1 >> a2[i].s2;
if (a2[i].s2=='C') p4++;
}
int p=500;
while (p--) {
N1=n,N2=n;
p1=p3,p2=p4;
int flag1=0,flag2=0;
for (int i=1;i<=n;i++) {
f1[i]=a1[i];
if (f1[i].s2=='L') flag1++;
//if (f1[i].b<=0) N1--;
f2[i]=a2[i];
if (f2[i].s2=='L') flag2++;
//if (f1[i].b<=0) N2--;
}
for (int i=1;i<=n;i++) {
if (f1[i].s1=='M') {
if (f1[i].s2=='L') f1[i].a+=20*(flag1-1);
else f1[i].a+=20*flag1;
}
if (f2[i].s1=='M') {
if (f2[i].s2=='L') f2[i].a+=20*(flag2-1);
else f2[i].a+=20*flag2;
}
}
while (N1&&N2) {
int x=Getid(),y=Getid();
f(x%N1+1,y%N2+1);
}
res1+=N1;
res2+=N2;
}
cout << res1 <<' '<< res2 <<endl;
return 0;
}