[IOI2018]组合动作 题解
传送门 LOJ2863
果然签到题就是好玩
首先我们可以猜2次来猜出第一个字符是什么,后面的串就和这个字符没关系了。
假设剩下的三个字符是tmp[0]
,tmp[1]
,tmp[2]
,目前已知答案串的长度为i−1i-1i−1的前缀是ans
。考虑第iii位(i≤n−1i\leq n-1i≤n−1),我们可以在ans
串后面接上一个字符然后press
来检查有没有获得更多的金币,但是这样的话你总共要press
大约3n3n3n次,不够理想。
我们可以设计一种方法来一次就获得S[i]
是什么字符,那就需要设计一个串p
使得对于不同的S[i]
,press(p)
的返回值不同。我们可以令p=ans+tmp[0]+ans+tmp[1]+tmp[0]+ans+tmp[1]+tmp[1]+ans+tmp[1]+tmp[2]
,那么如果press(p)
返回的是i−1i-1i−1就说明第iii位是tmp[2]
,如果返回值是iii就说明第iii位是tmp[0]
,否则就是tmp[1]
。
对于最后一位,再press
两下就行了。
#include "combo.h"
#include <string>char tmp[3];
std::string guess_sequence(int n) {char first;if (press("AB")) {if (press("A")) first = 'A', tmp[0] = 'B', tmp[1] = 'X', tmp[2] = 'Y';else first = 'B', tmp[0] = 'A', tmp[1] = 'X', tmp[2] = 'Y';} else {if (press("X")) first = 'X', tmp[0] = 'A', tmp[1] = 'B', tmp[2] = 'Y';else first = 'Y', tmp[0] = 'A', tmp[1] = 'B', tmp[2] = 'X';}std::string ans; ans += first;if (n == 1) return ans;for (int i = 2; i < n; ++i) {std::string p = ans + tmp[0] + ans + tmp[1] + tmp[0] + ans + tmp[1] + tmp[1] + ans + tmp[1] + tmp[2];int coin = press(p);if (coin == i - 1) ans += tmp[2];else if (coin == i) ans += tmp[0];else ans += tmp[1];}if (press(ans + tmp[0]) == n) ans += tmp[0];else if (press(ans + tmp[1]) == n) ans += tmp[1];else ans += tmp[2];return ans;
}
[IOI2018]组合动作 题解相关推荐
- 【cocos2d-x】动作类之缓冲动作和组合动作的使用(变速动作)
一.缓冲动作 在实现运动中,常常需要一些加速度或者减速度的效果.Cocos2D-X引擎为我们提供了相应的实现接口,这样就不用再用原来的公式计算方法来实现加减速的效果. Ease系列的方法改变 ...
- Cocos2d-x制作跳棋第四步:胜负判断、AI具体实现及实现特殊组合动作的小技巧
上周讲了Cocos2d-x 制作跳棋中棋子各种动作的实现以及跳棋AI思想的分 享,这次跟大家分享跳棋胜负判断和AI具体代码实现. 一. 胜 ...
- 组合学讲义 李乔(2ed)-习题1.1-6组合恒等式题解
写在前面 最近学习一下<组合学讲义>这本经典著作, 顺便解决一下书中出现的一些习题, 欢迎大家交流学习. 题目 证明下列等式: ∑k=0n(nk)2=(2nn);\sum_{k=0}^n\ ...
- [IOI2018] werewolf 狼人 题解
[IOI2018] werewolf 狼人 [IOI2018] werewolf 狼人 可以考虑到每一条边能否通过对于人形态来说,取决于两点的最小值,对于狼形态来说取决两点的最大值. 那么我们不妨考虑 ...
- 退役前的做题记录2.0
退役前的做题记录2.0 最近在刷省选题......大致上是按照省份刷的. 不过上面的题目顺序是按照写题的顺序排列的,所以可能会有点乱哈. [BZOJ2823][AHOI2012]信号塔 最小圆覆盖,随 ...
- 【COGS】2287:[HZOI 2015]疯狂的机器人 FFT+卡特兰数+排列组合
[题意][COGS 2287][HZOI 2015]疯狂的机器人 [算法]FFT+卡特兰数+排列组合 [题解]先考虑一维的情况,支持+1和-1,前缀和不能为负数,就是卡特兰数的形式. 设C(n)表示第 ...
- Cocos2D-x(3)——动作类备忘
1. CCAction是cocos2d-x中的动作类,继承自CCObject,动作类必须依托与CCNode及其子类对象来发回作用.CCAction的子类包括有限时间动作CCFiniteTimeActi ...
- [指数型生成函数专练]chocolate,红色病毒问题,排列组合,字串数
文章目录 T1:chocolate 题目 题解 code T2:"红色病毒"问题 题目 题解 code T3:排列组合 题目 题解 code T4:字串数 题解 code T1:c ...
- LeetCode 77 组合
题目描述 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合. 题解 深度优先搜索 代码 class Solution {public:void dfs(vector< ...
- cocos2d笔记 (4)cocos2d里的各种动作
通常调用某个动作的方法: // 创建动作id actionTo = [CCMoveTo actionWithDuration: 2 position:ccp(s.width-40, s.height ...
最新文章
- 王道考研 计算机网络笔记 第六章:应用层
- python编程 从入门到实践怎么样-python编程从入门到实践这本书怎么样
- 助力航天元器件管理“高可靠降成本”,赛思库获数千万元Pre-A轮融资
- python小数据池,代码块的最详细、深入剖析
- WinDbg配置与下载
- Qt之QFileSystemWatcher
- 常用jar包_几个解决 Maven Jar 包冲突的小技巧.
- 基于JAVA+SpringMVC+Mybatis+MYSQL的校园订餐系统
- 4.kibana部署
- 今天中午的时候,可能是自己太忙过头了,所以出现了拿错卡去充值
- oracle无效的关系运算符_每日一课 | Java 8中的instanceof运算符和访客模式替换
- mac xampp连接mysql_MAC系统XAMPP 中 MySQL命令行client配置使用
- vue.js中的路由vue-router2.0使用
- 【数学分析笔记03】上确界和下确界
- PTA数据结构-01-复杂度1 最大子列和问题
- T5557卡读、写及EM4100 ID、HID卡复制函数说明
- OpenGL日常-GLAD
- Safari 神器,手机平板都能用,我们找到了 14 个超实用浏览器插件
- 网络原理之TCP协议特性
- 如何提升自身能力?不再平庸
热门文章
- macbookair有没有touchbar_没有Touch Bar 全新13英寸MacBook Pro初体验
- 仿写天猫tmall首页
- 软件需求工程 高校教学平台 项目总结报告
- 验收测试的名词解释_验收测试工作流程及准则
- java虚拟机扫盲文
- android追美剧app,追美剧必备神器!安卓追剧助手App体验
- -TEST 16 for NOIP 让scar_lyw都绝望的T3(120-300)
- iOS 5 故事板入门(3)
- python判断可逆素数_可逆素数 - 寂寞暴走伤的个人空间 - OSCHINA - 中文开源技术交流社区...
- 微信端input输入框在ios手机上连续输入卡顿