题意:A和B两个人玩游戏,分别有n和m张牌,A的第i张牌是a[i],B是b[i]

两人轮流出牌,如果一种编号的牌被其中一个人出了另一个人就不能出自己手中这个编号的牌

两人都按最优策略行动,问获胜者

思路:

考场上好像卡常,补题的时候似乎没有

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef pair<ll,ll> Pll;
typedef vector<int> VI;
typedef vector<PII> VII;
//typedef pair<ll,ll>P;
#define N 200010
#define M 200010
#define fi first
#define se second
#define MP make_pair
#define pb push_back
#define pi acos(-1)
#define mem(a,b) memset(a,b,sizeof(a))
#define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
#define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
#define lowbit(x) x&(-x)
#define Rand (rand()*(1<<16)+rand())
#define id(x) ((x)<=B?(x):m-n/(x)+1)
#define ls p<<1
#define rs p<<1|1 const int MOD=1e9+,inv2=(MOD+)/;
double eps=1e-;
int INF=1e9;
int inf=0x7fffffff;
int dx[]={-,,,};
int dy[]={,,-,}; struct node
{
int x,y;
}q[N]; int a[N],b[N],c[N],s[],d[N][];
ull k1,k2; int read()
{
int v=,f=;
char c=getchar();
while(c<||<c) {if(c=='-') f=-; c=getchar();}
while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
return v*f;
} unsigned long long rng()
{
unsigned long long k3 = k1, k4 = k2;
k1 = k4;
k3 ^= k3 << ;
k2 = k3 ^ k4 ^ (k3 >> ) ^ (k4 >> );
return k2 + k4;
} bool cmp(node a,node b)
{
return a.x+a.y>b.x+b.y;
} void solve()
{
int n1=read(),n2=read(),p=read();
if(p==)
{
rep(i,,n1) a[i]=read();
rep(i,,n2) b[i]=read();
}
else
{
int mod;
scanf("%llu%llu%d",&k1,&k2,&mod);
rep(i,,n1) a[i]=rng()%mod;
scanf("%llu%llu%d",&k1,&k2,&mod);
rep(i,,n2) b[i]=rng()%mod;
}
int t=;
rep(i,,n1) c[++t]=a[i];
rep(i,,n2) c[++t]=b[i];
sort(c+,c+t+);
t=unique(c+,c+t+)-c-;
rep(i,,n1)
{
a[i]=lower_bound(c+,c+t+,a[i])-c;
d[a[i]][]++;
}
rep(i,,n2)
{
b[i]=lower_bound(c+,c+t+,b[i])-c;
d[b[i]][]++;
} int m=;
s[]=,s[]=;
rep(i,,t)
{
if(d[i][]&&d[i][])
{
m++;
q[m].x=d[i][];
q[m].y=d[i][];
continue;
}
if(d[i][]) s[]+=d[i][];
if(d[i][]) s[]+=d[i][];
}
sort(q+,q+m+,cmp);
int v=;
rep(i,,m)
{
v^=;
if(v==) s[v]+=q[i].x;
else s[v]+=q[i].y;
}
if(s[]>s[]) printf("Cuber QQ\n");
else printf("Quber CC\n");
rep(i,,t)
rep(j,,) d[i][j]=;
} int main()
{
int cas=read();
while(cas--) solve();
return ;
}

最新文章

  1. LINUX各目录用处
  2. yum安装rz和sz
  3. Jade之Includes
  4. Designing CSS Layouts With Flexbox Is As Easy As Pie
  5. 【Java 基础篇】【第三课】表达式、控制结构
  6. zw版【转发&#183;台湾nvp系列例程】halcon与delphi系列例程
  7. 膜拜acm大牛 虽然我不会这题,但是AC还是没有问题的~(转自hzwer)
  8. 用SPCOMM 在 Delphi中实现串口通讯 转
  9. Java Day 14
  10. 解决 nginx 返回数据不完整的方法
  11. js去除首尾空格
  12. GUI动态创建button
  13. Servlet的学习(一)
  14. ResultSet 转为 List或者JavaBean
  15. 基于MDK编程STM32程序无法使用,硬件仿真在汇编窗口看到停留在“0x0800XXXX BEAB BKPT 0xAB //进入调试模式”
  16. 51. leetcode 530. Minimum Absolute Difference in BST
  17. Java中的Redis应用
  18. 超级有爱的五款APP共享 可以让你神操作
  19. 【托业】【新东方托业全真模拟】TEST07~08-----P5~6
  20. 20155207王雪纯《网络对抗》Exp4 恶意代码分析

热门文章

  1. 测开之路九十:css的引用方式
  2. 类LinkedHashSet
  3. 删除历史日志的一个API
  4. SpringBoot整合jsp技术
  5. python基础数据类型补充以及编码的进阶
  6. .net core 自定义中间件
  7. #10017 传送带(SCOI 2010)(三分套三分)
  8. 2019牛客暑期多校训练营(第七场) - C - Governing sand - 平衡树
  9. Kafka DockerFile
  10. RocksDB存储引擎测试