传送门 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]组合动作 题解相关推荐

  1. 【cocos2d-x】动作类之缓冲动作和组合动作的使用(变速动作)

    一.缓冲动作 在实现运动中,常常需要一些加速度或者减速度的效果.Cocos2D-X引擎为我们提供了相应的实现接口,这样就不用再用原来的公式计算方法来实现加减速的效果.      Ease系列的方法改变 ...

  2. Cocos2d-x制作跳棋第四步:胜负判断、AI具体实现及实现特殊组合动作的小技巧

               上周讲了Cocos2d-x 制作跳棋中棋子各种动作的实现以及跳棋AI思想的分      享,这次跟大家分享跳棋胜负判断和AI具体代码实现.               一.  胜 ...

  3. 组合学讲义 李乔(2ed)-习题1.1-6组合恒等式题解

    写在前面 最近学习一下<组合学讲义>这本经典著作, 顺便解决一下书中出现的一些习题, 欢迎大家交流学习. 题目 证明下列等式: ∑k=0n(nk)2=(2nn);\sum_{k=0}^n\ ...

  4. [IOI2018] werewolf 狼人 题解

    [IOI2018] werewolf 狼人 [IOI2018] werewolf 狼人 可以考虑到每一条边能否通过对于人形态来说,取决于两点的最小值,对于狼形态来说取决两点的最大值. 那么我们不妨考虑 ...

  5. 退役前的做题记录2.0

    退役前的做题记录2.0 最近在刷省选题......大致上是按照省份刷的. 不过上面的题目顺序是按照写题的顺序排列的,所以可能会有点乱哈. [BZOJ2823][AHOI2012]信号塔 最小圆覆盖,随 ...

  6. 【COGS】2287:[HZOI 2015]疯狂的机器人 FFT+卡特兰数+排列组合

    [题意][COGS 2287][HZOI 2015]疯狂的机器人 [算法]FFT+卡特兰数+排列组合 [题解]先考虑一维的情况,支持+1和-1,前缀和不能为负数,就是卡特兰数的形式. 设C(n)表示第 ...

  7. Cocos2D-x(3)——动作类备忘

    1. CCAction是cocos2d-x中的动作类,继承自CCObject,动作类必须依托与CCNode及其子类对象来发回作用.CCAction的子类包括有限时间动作CCFiniteTimeActi ...

  8. [指数型生成函数专练]chocolate,红色病毒问题,排列组合,字串数

    文章目录 T1:chocolate 题目 题解 code T2:"红色病毒"问题 题目 题解 code T3:排列组合 题目 题解 code T4:字串数 题解 code T1:c ...

  9. LeetCode 77 组合

    题目描述 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合. 题解 深度优先搜索 代码 class Solution {public:void dfs(vector< ...

  10. cocos2d笔记 (4)cocos2d里的各种动作

    通常调用某个动作的方法:  // 创建动作id actionTo = [CCMoveTo actionWithDuration: 2 position:ccp(s.width-40, s.height ...

最新文章

  1. 王道考研 计算机网络笔记 第六章:应用层
  2. python编程 从入门到实践怎么样-python编程从入门到实践这本书怎么样
  3. 助力航天元器件管理“高可靠降成本”,赛思库获数千万元Pre-A轮融资
  4. python小数据池,代码块的最详细、深入剖析
  5. WinDbg配置与下载
  6. Qt之QFileSystemWatcher
  7. 常用jar包_几个解决 Maven Jar 包冲突的小技巧.
  8. 基于JAVA+SpringMVC+Mybatis+MYSQL的校园订餐系统
  9. 4.kibana部署
  10. 今天中午的时候,可能是自己太忙过头了,所以出现了拿错卡去充值
  11. oracle无效的关系运算符_每日一课 | Java 8中的instanceof运算符和访客模式替换
  12. mac xampp连接mysql_MAC系统XAMPP 中 MySQL命令行client配置使用
  13. vue.js中的路由vue-router2.0使用
  14. 【数学分析笔记03】上确界和下确界
  15. PTA数据结构-01-复杂度1 最大子列和问题
  16. T5557卡读、写及EM4100 ID、HID卡复制函数说明
  17. OpenGL日常-GLAD
  18. Safari 神器,手机平板都能用,我们找到了 14 个超实用浏览器插件
  19. 网络原理之TCP协议特性
  20. 如何提升自身能力?不再平庸

热门文章

  1. macbookair有没有touchbar_没有Touch Bar 全新13英寸MacBook Pro初体验
  2. 仿写天猫tmall首页
  3. 软件需求工程 高校教学平台 项目总结报告
  4. 验收测试的名词解释_验收测试工作流程及准则
  5. java虚拟机扫盲文
  6. android追美剧app,追美剧必备神器!安卓追剧助手App体验
  7. -TEST 16 for NOIP 让scar_lyw都绝望的T3(120-300)
  8. iOS 5 故事板入门(3)
  9. python判断可逆素数_可逆素数 - 寂寞暴走伤的个人空间 - OSCHINA - 中文开源技术交流社区...
  10. 微信端input输入框在ios手机上连续输入卡顿