最后两个WA了,提交记录里面从来没出现过类似的情况
求助呜呜呜呜
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#define int long long
using namespace std;
const int N=2e5+5;
struct card{
int col,val;
void scan(){
col=val=0;
string str;
cin>>str;
col=4-(str[0]-'a');
if(str[1]=='A'){val=1;return;}
for(int i=1;i<str.length();i++)
val=val*10+str[i]-'0';
}
};
struct player{
string name;
card c[6];
int pts,w;
int bomb_val;
bool tb;
card maxn(){
int num,mx=0,mxc;
for(int i=1;i<=5;i++)
if(mx<c[i].val){
mx=c[i].val;
num=i;
mxc=c[i].col;
}
else if(mx==c[i].val&&c[i].col>mxc){
mxc=c[i].col;
num=i;
}
return c[num];
}
};
unordered_map<string,int> mp;
string name[N];
int id,t,n;
player a[20];
void init(){
for(int i=1;i<=3;i++)
a[i].tb=a[i].pts=0;
}
void input(){
for(int i=1;i<=3;i++){
cin>>a[i].name;
for(int j=1;j<=5;j++)
a[i].c[j].scan();
}
}
int bomb(player x){
int v[10];
for(int i=1;i<=5;i++)v[i]=x.c[i].val;
sort(v+1,v+1+5);
if(v[1]==v[2]&&v[2]==v[3]&&v[3]==v[4])return v[1];
if(v[2]==v[3]&&v[3]==v[4]&&v[4]==v[5])return v[2];
return 0;
}
int cow(int x){
int v[10],sum=0,ret1=0,ret2=0;
for(int i=1;i<=5;i++){v[i]=a[x].c[i].val;sum+=v[i];}
sort(v+1,v+1+5);
if(v[1]==v[2]&&v[2]==v[3])if((v[4]+v[5])%10==0){a[x].tb=1;return 10;}
if(v[2]==v[3]&&v[3]==v[4])if((v[1]+v[5])%10==0){a[x].tb=1;return 10;}
if(v[3]==v[4]&&v[4]==v[5])if((v[1]+v[2])%10==0){a[x].tb=1;return 10;}
for(int i=1;i<=5;i++)
for(int j=1;j<=5;j++){
if(i==j)continue;
if((sum-v[i]-v[j])%10==0&&(v[i]+v[j])%10==0)return 10;
}
if(v[1]==v[2]&&v[2]==v[3])ret1=max((v[4]+v[5])%10,ret1);
if(v[2]==v[3]&&v[3]==v[4])ret1=max((v[1]+v[5])%10,ret1);
if(v[3]==v[4]&&v[4]==v[5])ret1=max((v[1]+v[2])%10,ret1);
for(int i=1;i<=5;i++)
for(int j=1;j<=5;j++){
if(i==j)continue;
if((sum-v[i]-v[j])%10==0)
ret2=max((v[i]+v[j])%10,ret2);
}
if(ret1==ret2&&ret1==0)return 0;
if(ret1>=ret2){a[x].tb=1;return ret1;}
return ret2;
}
void recog(){
for(int i=1;i<=3;i++){
if(bomb(a[i])){
a[i].w=11;
a[i].bomb_val=bomb(a[i]);
}
else a[i].w=cow(i);
}
}
bool cmp(player x,player y){
if(x.w!=y.w)return x.w>y.w;
if(x.w==11)return x.bomb_val>y.bomb_val;
if(x.tb!=y.tb)return x.tb>y.tb;
card mx=x.maxn(),my=y.maxn();
if(mx.val!=my.val)return mx.val>my.val;
return mx.col>my.col;
}
void solve(){
//cout<<cow(1)<<" "<<cow(2)<<endl;
for(int i=1;i<=3;i++)
for(int j=i+1;j<=3;j++)
{
if(cmp(a[i],a[j])){
int sum=10;
if(a[i].tb)sum*=2;
if(a[i].w==11)sum*=10;
if(a[i].w==10)sum*=3;
if(a[i].w>=7&&a[i].w<=9)sum*=2;
a[i].pts+=sum;
a[j].pts-=sum;
}
else{
int sum=10;
if(a[j].tb)sum*=2;
if(a[j].w==11)sum*=10;
if(a[j].w==10)sum*=3;
if(a[j].w>=7&&a[j].w<=9)sum*=2;
a[j].pts+=sum;
a[i].pts-=sum;
}
}
}
void calc(){
//cout<<a[1].pts<<" "<<a[2].pts<<" "<<a[3].pts<<endl;
for(int i=1;i<=3;i++)
mp[a[i].name]+=a[i].pts;
}
void output(){
for(int i=1;i<=n;i++)
cout<<name[i]<<" "<<mp[name[i]]<<endl;
}
signed main(){
scanf("%lld%lld%lld",&id,&t,&n);
for(int i=1;i<=n;i++){
cin>>name[i];
mp[name[i]]=0;
}
while(t--){
init();
input();
recog();
solve();
calc();
}
output();
return 0;
}