1 条题解
-
0
自动搬运
来自洛谷,原作者为

long_long__int
十年 OI 一场空,不开 long long 见祖宗。||彩笔。||不拿蓝钩不改签搬运于
2025-08-24 23:07:14,当前版本为作者最后更新于2024-12-20 21:36:06,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
抢到第二 A 了!发篇题解纪念一下!(疑似首 A?)
题目解法
按照题意模拟即可。
可以用一个数组标记一下某个颜色加数字的组合是否被打出过,用一个 的数组标记一个人是否打出过非场风的牌以及场风。谬误可以用数组来存。没啥好说的,上代码:
#include<bits/stdc++.h> using namespace std; #define int long long int n,cnt=0; bool vis[5][10]; string ans[100500]; string name[]={"","IGOR","LEA","MARINO","SONJA","VIKTOR"}; int nxt[]={0,2,3,4,5,1}; bool cant[6][5]; int an[100500]; signed main(){ cin>>n; int winner=4,now=winner,changfeng; for(int i=1;i<=n;i++){ int maxn=-1; bool flag=false;//有没有红色 for(int j=1;j<=5;j++,now=nxt[now]){ char ch; int x,y; cin>>ch>>y; if(ch=='Y') x=3; else if(ch=='Z') x=4; else if(ch=='C') x=1; else x=2; if(vis[x][y] or cant[now][x]) { ans[++cnt]=name[now]; an[cnt]=i; continue; } if(j==1){ changfeng=x; } vis[x][y]=true; if(j!=1 and changfeng!=x){ cant[now][changfeng]=true; } if(x==1){ if(!flag){//第一个打出红色的 maxn=y; winner=now; }else if(y>maxn){ maxn=y; winner=now; } flag=true; } if(!flag and x==changfeng and y>maxn){ maxn=y; winner=now; } } now=winner; } printf("%lld\n",cnt); for(int i=1;i<=cnt;i++){ printf("%lld ",an[i]); cout<<ans[i]<<"\n"; } return 0; }
- 1
信息
- ID
- 11116
- 时间
- 1000ms
- 内存
- 500MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者