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\)個區間的 ...
随机推荐
- Java12新特性
switch表达式(预览) 传统switch的缺点 匹配是自上而下的,如果忘记写break, 后面的case语句不论匹配与否都会执行; 所有的case语句共用一个块范围,在不同的case语句定义的变量 ...
- cnpm install 报错
报错如图所示,请观下文 1,npm cache clean --force 2,进入文件,rm -rf node_modules/ ---- 暴力直接
- 精心总结ansible-playbook剧本的这6种变量
#变量作用 #根据需求灵活修改,如:需要安装不同版本号的服务,或进行版本升级回退等 1.通过vars定义变量 #1.1.定义一个变量 version: 1.1.2 #定义多个变量 vars: - v1 ...
- luogu 3376 最小费用最大流 模板
类似EK算法,只是将bfs改成spfa,求最小花费. 为什么可以呢,加入1-3-7是一条路,求出一个流量为40,那么40*f[1]+40*f[2]+40*f[3],f[1]是第一条路的单位费用,f[2 ...
- vue下history模式刷新后404错误解决
官方说明文档: https://router.vuejs.org/zh/g... 一. 实测 Linux 系统 Apache 配置: 更改站点配置文件即可,我这里在 Directory 标签后面添加了 ...
- eureka集群的搭建
本次将会创建三个注册中心和一个客户端进行集群,架构图如下: 修改本机hosts文件,创建三个域名: 代码结构如图: 由于三个注册中心结构都是一样的,区别在于配置文件: #注册中心(eureka-ser ...
- Restful 风格是什么?
1.1 什么是RESTful 1. REST与技术无关,代表的是一种软件架构风格(REST是Representational State Transfer的简称,中文翻译为"表征状态转移&q ...
- 实验1:Mininet源码安装和可视化拓扑工具
一.实验目的 掌握 Mininet 的源码安装方法和 miniedit 可视化拓扑生成工具. 二.实验任务 使用源码安装 Mininet 的 2.3.0d6 版本,并使用可视化拓扑工具生成一个最简拓扑 ...
- Python实现的数据结构与算法之链表详解
一.概述 链表(linked list)是一组数据项的集合,其中每个数据项都是一个节点的一部分,每个节点还包含指向下一个节点的链接.根据结构的不同,链表可以分为单向链表.单向循环链表.双向链表.双向循 ...
- 【优化】单调队列与dp
笔者大概看了一下单调队列对于DP的优化,故撰此文,望有帮助. (dp还是推式子难啊qwq) 例题1. 题目大意:在n个数的序列中,选择数字,使得其连续不超过k个数,且和最大. 本题的方程相对好推:设d ...