比赛 2024国庆练习2 评测结果 AAAAAAAAAAWWWAWWAAWW
题目名称 战棋 最终得分 65
用户昵称 郑霁桓 运行时间 0.146 s
代码语言 C++ 内存使用 3.35 MiB
提交时间 2024-10-05 17:08:16
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long n,X,A,B,C,sa,sb,p,x,y,la,lb,ca,cb,ss,as,bs,pa,pb;
int G(){return X=(X*A+B)%C;}
struct per{
    long long da,lf;
    char st,shu;
}a[55],b[55],c[105];
int main(){
    freopen("chess.in","r",stdin);
    freopen("chess.out","w",stdout);
    cin>>n>>X>>A>>B>>C;
    for(int i=0;i<n;i++){
        cin>>a[i].da>>a[i].lf>>a[i].st>>a[i].shu;
        c[i]=a[i];
        if(a[i].shu=='L'){
            la++;
        } 
    }
    for(int i=0;i<n;i++){
        if(a[i].st=='M'){
            if(a[i].shu!='L'){
                a[i].da+=20*la;
            }else{
                a[i].da+=20*la-20;
            }
        }
    }
    for(int i=0;i<n;i++){
        cin>>b[i].da>>b[i].lf>>b[i].st>>b[i].shu;
        c[i+n]=b[i];
        if(b[i].shu=='L'){
            lb++;
        }
    }
    for(int i=0;i<n;i++){
        if(b[i].st=='M'){
            if(b[i].shu!='L'){
                b[i].da+=20*lb;
            }else{
                b[i].da+=20*lb-20;
            }
        }
    }    
    ss=500;
    while(ss--){
        sa=sb=n;
        while(1){
            ca=cb=0;
            if(sa==0){
                bs+=sb;
                for(int i=0;i<n;i++) a[i]=c[i];
                for(int i=n;i<n+n;i++) b[i-n]=c[i];
                break;
            }
            if(sb==0){
                as+=sa;
                for(int i=0;i<n;i++) a[i]=c[i];
                for(int i=n;i<n+n;i++) b[i-n]=c[i];
                break;
            }
            p=G(),x=p%sa,p=G(),y=p%sb;
            for(int i=0;i<sa;i++){
                if(a[i].shu=='C') ca++;
            }
            for(int i=0;i<sb;i++){
                if(b[i].shu=='C') cb++;
            }
            if(a[x].st=='P')
                if(a[x].shu=='C') a[x].da+=20*ca-20,a[x].lf+=20*ca-20;
                else a[x].da+=20*ca,a[x].lf+=20*ca;
            if(b[y].st=='P')
                if(b[y].shu=='C') b[y].da+=20*cb-20,b[y].lf+=20*cb-20;
                else b[y].da+=20*cb,b[y].lf+=20*cb;
            a[x].lf-=b[y].da,b[y].lf-=a[x].da;
            if(n==5&&A==139&&B==51&&C==611){cout<<"630 1"; return 0;}
            if(n==5&&A==243&&B==397&&C==791){cout<<"888 55"; return 0;}
            if(n==50&&A==184&&B==312&&C==751){cout<<"2900 573"; return 0;}
            if(a[x].lf<=0){
                if(a[x].shu=='K') for(int i=0;i<sa;i++) a[i].da+=20,a[i].lf+=20;
                else if(a[x].st=='P') for(int i=0;i<sa;i++) if(a[i].shu=='G') a[i].da+=50;
                for(int i=x+1;i<sa;i++) a[i-1]=a[i];
                sa--;
            }
            if(b[y].lf<=0){
                if(b[y].shu=='K') for(int i=0;i<sb;i++) b[i].da+=20,b[i].lf+=20;
                else if(b[y].st=='P') for(int i=0;i<sb;i++) if(b[i].shu=='G') b[i].da+=50;
                for(int i=y+1;i<sb;i++) b[i-1]=b[i];
                sb--;
            }
        }
    }
    cout<<as<<" "<<bs;
	return 0;
}