首页 技术 正文
技术 2022年11月8日
0 收藏 350 点赞 1,510 浏览 4483 个字

题面

题意:4个人围一圈坐着,每个人13张牌,然后从第一个人开始,必须按照A-K的顺序出牌,一个人出牌后,剩下的人依次可以选择是否质疑他,例如,第一个人现在必须出8(因为按照A-K顺序轮到了),可是他没有或者有,无论如何他会说,我出了x个8,这x张牌就背面朝上的放在桌上,如果有人质疑,才会翻开,然后如果发现这并不是x个8,第一个人就要把桌子上所有的牌收回手上,如果是x个8,这个人就要自己把所有牌收回去,最先出完牌的人,且没有被质疑成功的,就是赢家,输出最后4个人手上的剩下牌。然后给出了4个人的牌型,和策略。

题解:模拟,耐心模拟。坑在于中间要求字典序最小,10<2<3<…<9<A<J<K<Q 而不是A<J<Q<K(调了3h才发现。)

 #include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
struct Node
{
int cnt[];
void clear()
{
for (int i=;i<=;i++) cnt[i]=;
}
bool empty()
{
for (int i=;i<=;i++)
if(cnt[i]) return ;
return ;
}
int get()
{
if(cnt[]) return ;
for (int i=;i<=;i++) if(cnt[i]) return i;
if (cnt[]) return ;
if (cnt[]) return ;
if (cnt[]) return ;
if (cnt[]) return ;
return ;
}
int fuckget()
{
int num=INF,index;
if (cnt[]<num&&cnt[]>=)
{
num=cnt[];
index=;
}
for (int i=;i<=;i++)
if(cnt[i]<num&&cnt[i]>=)
{
num=cnt[i];
index=i;
}
if (cnt[]<num&&cnt[]>=)
{
num=cnt[];
index=;
}
if (cnt[]<num&&cnt[]>=)
{
num=cnt[];
index=;
}
if (cnt[]<num&&cnt[]>=)
{
num=cnt[];
index=;
}
if(cnt[]<num&&cnt[]>=)
{
num=cnt[];
index=;
}
return index;
}
int del(int i) {cnt[i]--;}
int add(int i) {cnt[i]++;}
}node[],discard;
char s[];
void insert(int index)
{
int len=strlen(s);
if(s[]==''&&s[]=='')
{
node[index].cnt[]++;
return;
}
char ch=s[];
if(ch=='A') node[index].cnt[]++;
else if(ch=='J') node[index].cnt[]++;
else if(ch=='Q') node[index].cnt[]++;
else if(ch=='K') node[index].cnt[]++;
else node[index].cnt[ch-'']++;
}
int calc(int x)
{
x=x+;
if(x==) x=;
return x;
}
void jianpai(int index)
{
for (int i=;i<=;i++) node[index].cnt[i]+=discard.cnt[i];
discard.clear();
}
void out(int x) {
if(x==) printf("A");
else if(x>=&&x<=) printf("%d",x);else
if(x==) printf("J");else
if(x==) printf("Q");else
if(x==) printf("K");
}
vector<int> vec;
int main()
{
while(~scanf("%s",s))
{
for (int i=;i<=;i++)node[i].clear();
discard.clear();
insert();
for (int i=;i<=;i++)
{
scanf("%s",s);
insert();
}
for (int i=;i<=;i++)
for (int j=;j<=;j++)
{
scanf("%s",s);
insert(i);
}
int index=,need=;
while()
{
bool ok=false;
for (int i=;i<=;i++)
{
if(node[i].empty())
{
ok=true;
break;
}
}
if(ok) break;
if(index==)
{
if(node[index].cnt[need])
{
node[index].del(need);
discard.add(need);
for (int i=;i<=;i++)
{
int p=(index+i)%;
if(p==)
{
if(node[p].cnt[calc(need)]==)
{
jianpai(p);
break;
}
}else
if(p==)
{
if(node[index].empty())
{
jianpai(p);
break;
}
}
}
}else
{
int fuck=node[index].get();
node[index].del(fuck);
discard.add(fuck);
for (int i=;i<=;i++)
{
int p=(index+i)%;
if(p==)
{
if(node[p].cnt[calc(need)]==)
{
jianpai(index);
break;
}
}else
if(p==) {
if(node[p].cnt[need]==) {
jianpai(index);
break;
}
}else
if(node[index].empty()) {
jianpai(index);
break;
}
}
}
}else
if(index==)
{
if(node[index].cnt[need])
{
while(node[index].cnt[need])
{
node[index].del(need);
discard.add(need);
}
for (int i=;i<=;i++)
{
int p=(index+i)%;
if(p==)
{
if(node[p].cnt[need]==)
{
jianpai(p);
break;
}
}else if(p==)
{
if(node[index].empty())
{
jianpai(p);
break;
}
}
}
}else
{
int fuck=node[index].get();
node[index].del(fuck);
discard.add(fuck);
for (int i=;i<=;i++)
{
int p=(index+i)%;
if(p==)
{
if(node[p].cnt[need]==)
{
jianpai(index);
break;
}
}else if(p==)
{
if(node[index].empty())
{
jianpai(index);
break;
}
}else
{
if(+node[p].cnt[need]>)
{
jianpai(index);
break;
}
}
}
}
}else
if(index==)
{
if(node[index].cnt[need])
{
while(node[index].cnt[need])
{
node[index].del(need);
discard.add(need);
}
for (int i=;i<=;i++)
{
int p=(index+i)%;
if(p==)
{
if(node[index].empty())
{
jianpai(p);
break;
}
}
}
}else
{
int num=;
int fuck=node[index].fuckget();
while(node[index].cnt[fuck])
{
node[index].del(fuck);
discard.add(fuck);
num++;
}
for (int i=;i<=;i++)
{
int p=(index+i)%;
if(p==)
{
if(node[index].empty())
{
jianpai(index);
break;
}
}else if(p==)
{
if(num+node[p].cnt[need]>)
{
jianpai(index);
break;
}
}
}
}
}else
{
if(node[index].cnt[need]>=)
{
while(node[index].cnt[need])
{
node[index].del(need);
discard.add(need);
}
for (int i=;i<=;i++)
{
int p=(index+i)%;
if(p==)
{
if(node[p].cnt[calc(need)]==)
{
jianpai(p);
break;
}
}
}
}else
if(node[index].cnt[need]>=)
{
int num=;
while(node[index].cnt[need])
{
node[index].del(need);
discard.add(need);
num++;
}
int fuck=node[index].get();
if(fuck)
{
num++;
node[index].del(fuck);
discard.add(fuck);
}
for (int i=;i<=;i++)
{
int p=(index+i)%;
if(p==)
{
if(node[p].cnt[calc(need)]==)
{
if(fuck) jianpai(index);
else jianpai(p);
break;
}
if(num+node[p].cnt[need]>)
{
jianpai(index);
break;
}
}
}
}else
{
int fuck=node[index].get();
node[index].del(fuck);
discard.add(fuck);
for (int i=;i<=;i++)
{
int p=(index+i)%;
if(p==)
{
if(node[p].cnt[calc(need)]==)
{
jianpai(index);
break;
}
if(node[p].cnt[need]+>)
{
jianpai(index);
break;
}
}else
if(p==)
{
if(node[p].cnt[need]==)
{
jianpai(index);
break;
}
}
}
}
}
need=calc(need);
index=(index+)%;
}
for (int i=;i<=;i++)
{
if(node[i].empty()) puts("WINNER");else
{
vec.clear();
for (int j=;j<=;j++)
for (int k=;k<=node[i].cnt[j];k++) vec.push_back(j);
int len=(int)vec.size();
for (int i=;i<=len-;i++)
{
out(vec[i]);
if(i==len-) printf("\n");
else printf(" ");
}
}
}
}
return ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,964
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,486
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,331
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,114
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,747
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,781