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;
}

最新文章

  1. 理解浏览器历史记录(2)-hashchange、pushState
  2. JavaScript进阶之this
  3. Tomcat Shell脚本(启动|关闭|重启|状态)
  4. 使用logrotate来进行轮换mysql的慢日志
  5. HDU 4251 --- 主席树(划分树是正解)
  6. (1)WinForm和WebForm
  7. POJ3034+DP
  8. WCF的ABC
  9. 生成Excel錯誤 遠端程序呼叫失敗。 (發生例外狀況於 HRESULT: 0x800706BE)
  10. Windows打印体系结构之Print Spooler概念与架构
  11. Swift - guard关键字(守护)
  12. using 1.7 requires using android build tools version 19 or later
  13. 【ASP.NET Web API教程】2.3 与实体框架一起使用Web API
  14. QUIC简要
  15. 洛谷 [P1119] 灾后重建
  16. [Python]Flask构建网站分析应用
  17. 常见JS写法
  18. 一个ner的bug
  19. 关于dede后台登陆后一片空白以及去除版权
  20. java.lang.NoSuchMethodError: org.springframework.web.context.ConfigurableWebApplicationContext.getEnvironment()Lorg/springframework/core/env/ConfigurableEnvironment;问题

热门文章

  1. 安装jenkins插件的两种方法
  2. Fragment简单用法
  3. Android Studio Gradle项目中加入JNI so文件
  4. 【VBA】查看当前窗口的宽与高
  5. 键盘上所有键位的ascii值
  6. jquery.validate.js 验证表单时,在IE当中未验证就直接提交的原因
  7. excel表格快捷键
  8. centOS7安装RabbitMQ及python实例
  9. IQueryable和IEnumerable以及AsEnumerable()和ToList()的区别
  10. Selenium3.X 与 Javascript (Nodejs)