IOI2018 组合动作

UOJ
首先显然可以两次试出首字母
考虑增量构造
假设首字母为A,且已经试出前i个字母得到的串s
我们考虑press这样一个串s+BB+s+BX+s+BY+s+XA
首先这个串长不超过4N
其次由于首字母不重,返回的ans只会等于i+2,i+1,i三者中的一个
如果是i+2,那么显然可以确定第i+1个字母为B,因为XA一定不会产生2的贡献(A是首字母)
如果是i+1,那么第i+1个字母一定是X
如果是i,那么第i+1个字母一定是Y
剩下首字母为B,X,Y的情况类似构造
我们一直使用上述方法试到第n-1个
最后再两次试出最后一个字母即可
这样的总次数是2+(n-2)+2=n+2次
下面是提交代码:

#include<bits/stdc++.h>
#include "combo.h"
using namespace std;
string f[7],ans;
void getf(string fir){if(fir=="A"){f[0]+="BB";f[1]+="BX";f[2]+="BY";f[3]+="XA";f[4]+="Y";f[5]+="B";f[6]+="X";}if(fir=="B"){f[0]+="AA";f[1]+="AX";f[2]+="AY";f[3]+="XB";f[4]+="Y";f[5]+="A";f[6]+="X";}if(fir=="X"){f[0]+="AA";f[1]+="AB";f[2]+="AY";f[3]+="BX";f[4]+="Y";f[5]+="A";f[6]+="B";}if(fir=="Y"){f[0]+="AA";f[1]+="AB";f[2]+="AX";f[3]+="BY";f[4]+="X";f[5]+="A";f[6]+="B";}
}
void getfir(){int sc=press("AB");if(sc){int x=press("A");if(x)ans+='A';else ans+='B';}else{int x=press("X");if(x)ans+='X';else ans+='Y';}
}
void getlas(int n){int sc=press(ans+f[4]);if(sc==n)ans+=f[4];else{sc=press(ans+f[5]);if(sc==n)ans+=f[5];else ans+=f[6];}
}
string guess_sequence(int n){getfir();if(n==1)return ans;getf(ans);for(int i=2;i<=n-1;i++){string now="";now+=ans+f[0]+ans+f[1]+ans+f[2]+ans+f[3];int x=press(now);if(x==i+1)ans+=f[0][0];if(x==i)ans+=f[3][0];if(x==i-1)ans+=f[4];}getlas(n);return ans;
}

给大家提供一个手写的press用于调试

int press(string ss){int l=ss.length(),res=0;for(int i=0;i<l;i++){int js=0;for(int j=0,k=i;j<L;j++,k++)if(ss[k]==S[j])js++;else break;res=max(res,js);}
//cout<<ss<<' '<<res<<endl;return res;
}

转载于:https://www.cnblogs.com/sdzwyq/p/9833642.html

[IOI2018]组合动作相关推荐

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

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

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

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

  3. 退役前的做题记录2.0

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

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

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

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

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

  6. IOI2018退役记 + NOIP2018游记

    Day1 在空中感受了一下日本的特别高的森林覆盖率,在机场感受到了家乡的感觉(中文似乎作为第三语言),过海关的时候感受到了对面说英文我听不懂口音,说中文我以为在说英文的无力.. 认识了向导,据说878 ...

  7. Unity实战之牧师与魔鬼(动作分离版)

    Unity实战之牧师与魔鬼(动作分离版) 项目链接 整体描述 本次项目在第一版牧师与魔鬼的基础上,将动作从场记中分离出来,并设计一个裁判类实时监测游戏进行的情况.这样改进的优点有很多: 降低了不同功能 ...

  8. 魔鬼与牧师动作分离版

    关于动作分离.可以通过对游戏对象增加可执行的动作,可以划分出很多的基础动作,如上船,下船,前进后退等.所以我们可以通过提取基础动作,然后使用类的方法来执行游戏对象的动作,同时通过配备动作管理者,让其去 ...

  9. 牧师与魔鬼 -- version2 动作分离

    目录 一.基本操作演练 1.下载 Fantasy Skybox FREE, 构建自己的游戏场景 2.写一个简单的总结,总结游戏对象的使用 二.编程实践 1.牧师与魔鬼 动作分离版 面向对象的游戏编程 ...

  10. Unity牧师与魔鬼小游戏(动作分离版)

    Unity牧师与魔鬼小游戏(动作分离版) 前言 这是中大计算机学院3D游戏编程课的一次作业,在这里分享一下设计思路. 主要代码上传到了gitee上,请按照后文的操作运行. 项目地址:https://g ...

最新文章

  1. 【LeetCode从零单排】No.135Candy(双向动态规划)
  2. Geospark-SQL加载SHP数据
  3. android sqlite触发器,SQLite---使用触发器(Trigger)
  4. 将视图转为image_使用视图绑定替代 findViewById
  5. springboot使用curator实现服务的注册和发现
  6. 我的Android进阶之旅------修改Android签名证书keystore的密码、别名alias以及别名密码...
  7. rsync 安装 配置 实例
  8. 基于R语言利用QQ群进行数据挖掘案例整理
  9. 《AutoCAD全套园林图纸绘制自学手册》一1.5 园林设计图的绘制
  10. python鼠标拖拽功能_python 基于selenium实现鼠标拖拽功能
  11. 【12c】直方图Histograms
  12. Android课题研究的主要观点,二、本课题的研究目标、研究内容、主要观点和创新之处.doc...
  13. 有趣的姓名小知识:你身边有叫沐宸和若汐的宝宝吗?
  14. angular路由模拟微信页面切换和页面之间的传值
  15. RBF神经网络简单介绍与MATLAB实现
  16. python接口自动化--接口测试工具介绍(详解)
  17. HTML5期末大作业:个人网站设计——拾艺客个人设计工作室(6个页面) HTML+CSS+JavaScript...
  18. 解决部署Hexo后出现的The custom domain for your GitHub Pages site is pointed at an outdated IP address警告
  19. Fedora 17下NVIDIA双显卡闭源驱动的安装
  20. 动网8.1后台拿站技巧

热门文章

  1. 性能测试监控TP50、TP99、TP999含义
  2. 如何备份以及恢复Windows系统的环境变量
  3. python qt是什么_初识Python与Qt
  4. JavaWeb之Request与Response详解
  5. idea使用@Slf4j
  6. python怎么变成白色_在python中将一系列颜色更改为白色
  7. Flink 实现Locality 模式调度
  8. db服务器在游戏服务器组中的作用
  9. android 获取root权限原理解析,手机如何获得root权限 原理以及作用是什么
  10. 卷积神经网络表情识别,神经网络动作识别