记录编号 594941 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 战棋 最终得分 100
用户昵称 Gravatar小金 是否通过 通过
代码语言 C++ 运行时间 0.126 s
提交时间 2024-10-06 11:41:48 内存使用 3.55 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
struct ch{
    int l,t;
    char z,s;
}a[60],b[60],a2[60],b2[60];
int n,xx,aa,bb,cc,s1,s2,ji1,ji2,ans1,ans2; 
int Getid() 
{ 
    return xx=(xx*aa+bb)%cc;
}
void jsCa(int xh)
{
    int sum=0;
    for(int i=1;i<=s1;i++)
    {
        if(a[i].s=='C') sum++;
    }
    a[xh].l+=sum*20;
    a[xh].t+=sum*20;
    if(a[xh].s=='C')
    {
        a[xh].l-=20;
        a[xh].t-=20;
    } 
}
void jsCb(int xh)
{
    int sum=0;
    for(int i=1;i<=s2;i++)
    {
        if(b[i].s=='C') sum++;
    }
    b[xh].l+=sum*20;
    b[xh].t+=sum*20;
    if(b[xh].s=='C')
    {
        b[xh].l-=20;
        b[xh].t-=20;
    } 
}
void jsKa()
{
    for(int i=1;i<=s1;i++)
    {
        if(a[i].z=='M') 
        {
            a[i].l+=20;
            a[i].t+=20;
        }
    }
}
void jsGa()
{
    for(int i=1;i<=s1;i++)
    {
        if(a[i].s=='G') a[i].t+=50;
    }
}
void jsKb()
{
    for(int i=1;i<=s2;i++)
    {
        if(b[i].z=='M') 
        {
            b[i].l+=20;
            b[i].t+=20;
        }
    }
}
void jsGb()
{
    for(int i=1;i<=s2;i++)
    {
        if(b[i].s=='G') b[i].t+=50;
    }
}
void qjsLa(int xh)
{
    for(int i=1;i<=s1;i++)
    {
        if(a[i].z=='M'&&i!=xh) a[i].t-=20;
    }
}
void qjsLb(int xh)
{
    for(int i=1;i<=s2;i++)
    {
        if(b[i].z=='M'&&i!=xh) b[i].t-=20;
    }
}
void work()
{
    while(s1!=0&&s2!=0)
    {
        int x=(Getid()%s1)+1;
        int y=(Getid()%s2)+1;
        if(a[x].z=='P') jsCa(x);
        if(b[y].z=='P') jsCb(y);
        a[x].l-=b[y].t;
        b[y].l-=a[x].t;
        if(a[x].l<=0)
        {
            if(a[x].s=='K') jsKa();
            if(a[x].z=='P') jsGa();
            if(a[x].s=='L') qjsLa(x);
            for(int i=x+1;i<=s1;i++)
            {
                a[i-1]=a[i];
            }
            s1--;
        }
        if(b[y].l<=0)
        {
            if(b[y].s=='K') jsKb();
            if(b[y].z=='P') jsGb();
            if(b[y].s=='L') qjsLb(y);
            for(int i=y+1;i<=s2;i++)
            {
                b[i-1]=b[i];
            }
            s2--;
        }
    }
}
void jsLa()
{
    for(int i=1;i<=s1;i++)
    {
        if(a[i].s=='L')
        {
            for(int j=1;j<=s1;j++)
            {
                if(a[j].z=='M'&&i!=j)
                {
                    a[j].t+=20;
                }
            }
        }
    }
}
void jsLb()
{
    for(int i=1;i<=s2;i++)
    {
        if(b[i].s=='L')
        {
            for(int j=1;j<=s2;j++)
            {
                if(b[j].z=='M'&&i!=j)
                {
                    b[j].t+=20;
                }
            }
        }
    }
}
void chu()
{
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    for(int i=1;i<=n;i++)
    {
        a[i]=a2[i];
        b[i]=b2[i];
    }
}
int main()
{
    freopen("chess.in","r",stdin);
    freopen("chess.out","w",stdout);
    scanf("%d%d%d%d%d",&n,&xx,&aa,&bb,&cc);
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d %c %c",&a2[i].t,&a2[i].l,&a2[i].z,&a2[i].s);
    }
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d %c %c",&b2[i].t,&b2[i].l,&b2[i].z,&b2[i].s);
    }
    for(int k=1;k<=500;k++)
    {
        s1=n;
        s2=n;
        chu();
        jsLa();
        jsLb();
        work();
        ans1+=s1;
        ans2+=s2;
    }
    printf("%d %d",ans1,ans2);
    return 0;
}