CF1033G Chip Game
题意
给你一个长度为\(n\)的序列和一个数\(m\)。
小A和小B分别在\([1,m]\)选出一个数\(a\)和\(b\),然后开始游戏。
轮到小A时,他选择一个元素减\(a\);小B则选择一个元素减\(b\)。
不能将元素变成负数。
问对于所有\(m \times m\)对\((a,b)\),分别有多少对是小A/B必胜,先/后手必胜。
$ n \leq 100,m \leq 100000 $,序列元素 $ \leq 10^{18} $
思路
首先易知,原序列与原序列\(mod \space a+b\)后得到的结果是一样的,且A必胜与B必胜的情况种类是一样的,所以不妨假设\(a \leq b\)
先取模,然后对后来的序列进行讨论
| 判断条件1 | \(d\)个数\(\geq 2a\) | \(c\)个数\(\geq b\) | 判断条件4 | 情况 |
|---|---|---|---|---|
| $ \exists i$ 使\(a \leq x_i <b\) | A | |||
| \(d \geq2\) | A | |||
| \(c=0\) | 后 | |||
| \(c \text{ mod } 2=1\) | 先 | |||
| \(d=1\) | A | |||
| \(d=0\) | 后 |
一个大的分类讨论
枚举\(a+b\),每次\(O(n \space log n)\)计数,总复杂度\(O(2nm \space log n)\)
#include <bits/stdc++.h>
using std::sort;
using std::min;
using std::max;
int n,m,b[105];
long long a[105],cnt1,cnt2;
int main(){
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++) scanf("%lld",&a[i]);
for (int i=2;i<=2*m;i++){
for (int j=1;j<=n;j++) b[j]=a[j]%i;
sort(b+1,b+n+1);
b[n+1]=m;
if (~i&1){
int t1=0;
for (int j=1;j<=n;j++) if (b[j]>=i/2) t1=t1^1;
if (t1) cnt2++;
}
for (int j=1;j<=n+1;j++){
int l=max(b[j-1]+1,i/2+1),r=min(min(i-1,m),b[j]);
if (r<l) continue;
int al=max(b[j-1],b[n-1]/2),bl=max(l,i-al);
if (bl<=r) cnt1+=r-bl+1,r=bl-1;
if (r<l) continue;
if ((n-j+1)&1) cnt2+=(r-l+1)*2;
else{
al=b[n-1]/2+1;int ar=b[n]/2;
bl=max(l,i-ar);int br=min(r,i-al);
if (br>=bl) cnt1+=br-bl+1;
}
}
}
printf("%lld %lld %lld %lld",cnt1,cnt1,cnt2,1ll*m*m-cnt1-cnt1-cnt2);
}
后记
ZJOI2019 kcz讲解了此题,但是写起来还是有点晕,ZJOI开心地爆了
CF1033G Chip Game的更多相关文章
- p_b_p_b 杂题选讲
[ARC119F] AtCoder Express 3 [ARC117F] Gateau 考虑二分答案,对前缀和建差分约束 \(\text{check}\) ,但是用 \(\text{spfa}\) ...
- a chip multiprocessor
COMPUTER OR GANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION A multicore computer ...
- hdu5269 Chip Factory
地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=5536 题目: Chip Factory Time Limit: 18000/9000 MS ( ...
- 2015ACM/ICPC亚洲区长春站 J hdu 5536 Chip Factory
Chip Factory Time Limit: 18000/9000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)T ...
- codeforces 590B B. Chip 'n Dale Rescue Rangers(二分+计算几何)
题目链接: B. Chip 'n Dale Rescue Rangers time limit per test 1 second memory limit per test 256 megabyte ...
- Codeforces Round #327 (Div. 1) B. Chip 'n Dale Rescue Rangers 二分
题目链接: 题目 B. Chip 'n Dale Rescue Rangers time limit per test:1 second memory limit per test:256 megab ...
- HDU 5536 Chip Factory 字典树
Chip Factory Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid= ...
- Codeforces Round #327 (Div. 2) D. Chip 'n Dale Rescue Rangers 二分 物理
D. Chip 'n Dale Rescue Rangers Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/co ...
- Cheap CK100 1024 tokens NXP FIX Chip on Eobd2
CK100 is a well-known and cost-effective key programmer for many cars. Some said it is a must for bo ...
随机推荐
- C++设计模式——解释器模式
解释器模式 在GOF的<设计模式:可复用面向对象软件的基础>一书中对解释器模式是这样说的:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.如 ...
- 【easy】226. Invert Binary Tree 反转二叉树
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...
- 【原创】Linux基础之linux常用命令之文本替换
linux常用命令之文本替换 1 vi vi test_file :%s/h/h1/g 注释:全文替换,将h替换为h1 :1,4s/h/h1/g 注释:将第1行到第4行的h替换为h1 :%s/\n/, ...
- 20175226 2018-2019-2 《Java程序设计》第三周学习总结
20175226 2018-2019-2 <Java程序设计>第三周学习总结 教材学习内容总结 编程语言的几个发展阶段 类面向机器语言(汇编语言).面向过程语言(C语言).面向对象语言(J ...
- (四)Knockout 表单
click <div> You've clicked <span data-bind="text: numberOfClicks"></span> ...
- [原创]基于Zynq AXI-Bram Standalone & Linux 例程
基于Zynq AXI-Bram Standalone & Linux 例程 待添加完善中
- 【ABP】工作单元——不进行事物独立执行功能
1.注入 private readonly IUnitOfWorkManager unitOfWorkManager; 2.构造 3.开启新事物 using (var unitOfWork = uni ...
- ORA-12541:tns:no listener
打开任务管理器,查看服务,看箭头所指的三个服务是否开启即可
- WIN10 拨号连接下 如何开启移动热点
错误提示为:我们无法设置移动热点,因为你的电脑未建立以太网,WIFI或手机网络连接. 解决方法: 1. 首先用手机或其他设备建立无线热点. 2. 电脑连接步骤1中的热点,电脑端打开移动热点. 3. ...
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第5章编程练习6
#include <iostream>#include <string>using namespace std;struct car{ string pro; int yea ...