2022杭电第五场
1010 Bragging Dice
题意:
YahAHa和Peanut各掷一次骰子,YahAHa先手,进行声明;Peanut则可以挑战,如果符合声明,则YahAHa胜利,反之。Peanut也可以继续声明,但声明的骰子数和点数有一个要比之前的声明大。 另外有三条规则:
如果没有人声明“有x个1点的筛子”,那么1点可认为是任意点数
如果一个杯子中所有筛子点数相同,就认为杯子中还有一个同点数的筛子
如果一个杯子中筛子的点数各不相同,则认为各个点数的筛子个数为0
优先满足第三条规则,两个玩家都知道两个杯子中每个筛子的点数。 问在最优策略下YahAHa是否能够获胜。
思路:
除杯中的筛子点数全部不同,YahAHa必胜。
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn=5e5+5;
typedef long long ll;
const int mod=998244353;
inline int iread()
{
register ll x=0,f=1;
char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9')
{
x=(x<<3)+(x<<1)+(c^48); //等价于x*10+c-48,使用位运算加速
c=getchar();
}
return x*f;
}//快读
int main(){
int t;
// scanf("%d",&t);
t=iread();
while(t--){
int n,aa[10],bb[10],a,b;
cin>>n;
memset(aa,0,sizeof(aa));
memset(bb,0,sizeof(bb));
for(int i=1;i<=n;i++){
a=iread();
// cin>>a;
aa[a]++;
}
for(int i=1;i<=n;i++){
b=iread();
bb[b]++;
}
if(n<7){
int f=0;
for(int i=1;i<=6;i++){
if(aa[i]>1||bb[i]>1){
f=1;
break;
}
}
if(f==1){
puts("Win!");
}else{
puts("Just a game of chance.");
}
}else{
puts("Win!");
}
}
}