A. Arena of Greed 解析(思維)
Codeforce 1425 A. Arena of Greed 解析(思維)
今天我們來看看CF1425A
題目連結
題目
略,請直接看原題。
前言
明明是難度1400的題目,但總感覺不是很好寫阿,而且以下題解我感覺有些地方我也懵懵懂懂的,不是超級確定
想法
首先,這題目有一個除以\(2\)的動作,因此有可能聯想到\(:\)我們必須用二進位來看待數字\(n\)。
有一個不等式非常重要,在這邊重提:\(\sum\limits_{n=0}^k2^n<2^{k+1}\),也就是更高位的\(bit\)一定比低位的所有\(bit\)總和還要大。
並且我們注意到,如果把一個偶數\(-1\),目前最低位的\(bit\)會被拆成更低位的所有\(bit\)的總和,也就是例如:\(100000_2-1_2=11111_2\),下標\(_2\)是指二進位。
而我們可以觀察到,如果有個偶數,且偶數的第\(0\),第\(1\)個\(bit\)都是\(0\),也就是例如\(1100_2\)這個數字。只要我們先減\(1\),這樣會變成\(1011_2\),因此對手只能拿\(1\),使得變成\(1010_2\)。而\(1010_2\)並不符合「第\(0\),第\(1\)個\(bit\)都是\(0\)」,因此我們直接拿一半...。
只要我們遵循「是偶數且第\(0\),第\(1\)個\(bit\)都是\(0\)」時先拿\(1\),那麼之後對手都只能拿到\(1\)而不能拿\(\frac{n}{2}\),我們有極大的優勢。
最後如果能再注意到\(:\)只有當我們至少有一個大於\(100_2\)的\(bit\)時,我們才會在「是偶數且第\(0\),第\(1\)個\(bit\)都是\(0\)」時先拿\(1\),因為在\(100_2\)時,我們就算先拿一半,只要對手接下來也最多拿到\(1\)。
程式碼:
ll t,n,nn,ans;
main(void) {ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>t;while(t--){
cin>>n;nn=n;ans=0;
if(n&1)n--;
while(n>0){
if(n<8){
if(n&1)ans++,n--;
else ans+=n/2,n/=2;
if(n==0)continue;
if(n&1)n--;
else n/=2;
continue;
}
assert(n%2==0);
if(n%4==0)ans++,n-=2;
else ans+=n/2,n/=2,n--;
}
if(nn&1)cout<<nn-ans<<'\n';
else cout<<ans<<'\n';
}
return 0;
}
標頭、模板請點Submission看
Submission
A. Arena of Greed 解析(思維)的更多相关文章
- E. Almost Regular Bracket Sequence 解析(思維)
Codeforce 1095 E. Almost Regular Bracket Sequence 解析(思維) 今天我們來看看CF1095E 題目連結 題目 給你一個括號序列,求有幾個字元改括號方向 ...
- C2. Power Transmission (Hard Edition) 解析(思維、幾何)
Codeforce 1163 C2. Power Transmission (Hard Edition) 解析(思維.幾何) 今天我們來看看CF1163C2 題目連結 題目 給一堆點,每兩個點會造成一 ...
- F. Moving Points 解析(思維、離散化、BIT、前綴和)
Codeforce 1311 F. Moving Points 解析(思維.離散化.BIT.前綴和) 今天我們來看看CF1311F 題目連結 題目 略,請直接看原題. 前言 最近寫1900的題目更容易 ...
- B. Two Arrays 解析(思維)
Codeforce 1417 B. Two Arrays 解析(思維) 今天我們來看看CF1417B 題目連結 題目 略,請直接看原題. 前言 a @copyright petjelinux 版權所有 ...
- C. k-Amazing Numbers 解析(思維)
Codeforce 1417 C. k-Amazing Numbers 解析(思維) 今天我們來看看CF1417C 題目連結 題目 略,請直接看原題. 前言 我實作好慢... @copyright p ...
- D. Road to Post Office 解析(思維)
Codeforce 702 D. Road to Post Office 解析(思維) 今天我們來看看CF702D 題目連結 題目 略,請直接看原題. 前言 原本想說會不會也是要列式子解或者二分搜,沒 ...
- C. Bank Hacking 解析(思維)
Codeforce 796 C. Bank Hacking 解析(思維) 今天我們來看看CF796C 題目連結 題目 略,請直接看原題. 前言 @copyright petjelinux 版權所有 觀 ...
- B. Kay and Snowflake 解析(思維、DFS、DP、重心)
Codeforce 685 B. Kay and Snowflake 解析(思維.DFS.DP.重心) 今天我們來看看CF685B 題目連結 題目 給你一棵樹,要求你求出每棵子樹的重心. 前言 完全不 ...
- D. Rescue Nibel! 解析(思維、組合、離散化、差分)
Codeforce 1420 D. Rescue Nibel! 解析(思維.組合.離散化.差分) 今天我們來看看CF1420D 題目連結 題目 給你\(n\)個區間,求有幾種方法使得\(k\)個區間的 ...
随机推荐
- node核心模块-vm
vm vm是node的一个核心模块,核心功能官方文档介绍是: The vm module provides APIs for compiling and running code within V8 ...
- mysql-7-join
#进阶7:连接查询 /* 多表连接:查询的字段来自多个表 按功能分类: 内连接: 等值连接 非等值连接 自连接 外连接: 左外连接 右外连接 全外连接 交叉连接 */ USE girls; SELEC ...
- helm部署的服务如何修改配置
关于helm部署服务 在Kubernetes上进行容器化部署时,使用helm可以简化操作,以部署Jenkins为例,只需要以下命令即可完成部署: helm install --namespace he ...
- java安全编码指南之:方法编写指南
目录 简介 不要在构造函数中调用可以被重写的方法 不要在clone()方法中调用可重写的方法 重写equals()方法 hashCode和equals compareTo方法的实现 简介 java程序 ...
- 如何使用微软提供的TCHAR.H头文件?
转载:https://www.cnblogs.com/flyingspark/archive/2012/03/16/2399788.html 如何使用微软提供的TCHAR.H头文件? 如果你现在写的代 ...
- Tomcat 第六篇:类加载机制
1. 引言 Tomcat 在部署 Web 应用的时候,是将应用放在 webapps 文件夹目录下,而 webapps 对应到 Tomcat 中是容器 Host ,里面的文件夹则是对应到 Context ...
- vue+elementUI实现 分页表格的单选或者多选、及禁止部分选择
一.vue+elementUI实现 分页表格前的多选 多选效果图: 代码如下: <el-table ref="multipleTable" :data="listD ...
- 学习Jmeter,这一篇就够了
Jmeter在软件测试中的常用功能,看完你应该就会了 1.Jmeter的下载安装 1.1 Jmeter的官方网址是:http://jmeter.apache.org/:下载最新的包到本地进行解压,路 ...
- 判断移动还是PC 以及微信环境
//判断pc还是移动端 function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = ["Andro ...
- 程序3-6 WERTYU
把手放在键盘上时,稍不注意就会往右错一 位.这样,输入Q会变成输入W,输入J会变成输 入K等.键盘如图3-2所示. 输入一个错位后敲出的字符串(所有字母均 大写),输出打字员本来想打出的句子.输入保 ...