zoukankan      html  css  js  c++  java
  • 【IOI2018】组合动作

    题目

    我是垃圾;

    最开始觉得可以三次问出第一位,之后还有(n-1)位和(n-1)次询问,只需要一次确定一位就好了;之后就发现我是垃圾,上来直接press("AB"),如果不是(0)那么首位就是(A)(B),否则就是(X)(Y),之后再问一次就好了;

    之后我们需要用(n)次确定(n-1)位,于是就开始大跃进了;想着这个应该是除了最后一位需要特殊搞搞,其他只需要一次询问就好了吧;但为什么最后一位需要特殊搞呢,他肯定是让我一次确定两位!

    设目前已经确定的前缀是(S),不妨假设首位就是(X),如果我们询问的串是(S+A+A,S+A+B,S+A+Y,S+B+A)四个串拼起来,那么观察一波发现如果返回的增量是(0),说明(A,B)都不行,这一位是(Y);如果返回的增量是(1),那么不可能是(Y),也不可能是(A),毕竟(A)后面的三种情况我们都问了,于是这一位是(B);如果增量是(2)呢,下两位可能是(AA,AB,AY,BA)

    之后就自闭了,于是就想再问一次把两位都确定下来,就想着我们可以再问一下(S+A+Y,S+A+A),如果增量是(0),那么就是(BA)了;如果增量是(1),那么就是(AB)了;增量是(2)的话,好像无论如何都需要再来一次确定下一位是(Y)还是(A),于是彻底自闭了;

    果不其然我是垃圾,我们直接问(S+A+A,S+A+B,S+A+Y,S+B)就好了,如果增量是(0),那么就是(Y);增量是(1),那么就是(B);如果增量是(2),那么就是(A);这样每次确定一位,最后一位需要两次特殊处理一下就好了。

    综上所述,我是垃圾

    代码

    #include "combo.h"
    #include<bits/stdc++.h>
    #define re register
    std::string nw;int tot;
    std::string s[5];
    std::string guess_sequence(int n) {
    	nw="";int k=press("AB");
    	if(!k) {
    		if(press("X")==1) nw+="X";else nw+="Y";
    	}
    	if(k==1) {
    		if(press("A")==1) nw+="A";else nw+="B";
    	}
    	if(k==2) nw+="A";
    	if(n==1)return nw;
    	if(nw!="A")s[++tot]="A";
    	if(nw!="B")s[++tot]="B";
    	if(nw!="X")s[++tot]="X";
    	if(nw!="Y")s[++tot]="Y";
    	for(re int i=2;i<n;++i) {
    		int len=press(nw+s[1]+s[1]+nw+s[1]+s[2]+nw+s[1]+s[3]+nw+s[2]);
    		if(len==i+1) nw+=s[1];
    		if(len==i) nw+=s[2];
    		if(len==i-1) nw+=s[3];
    	}
    	if(press(nw+s[1])==n) nw+=s[1];
    	else {
    		if(press(nw+s[2])==n) nw+=s[2];
    		else nw+=s[3];
    	}
    	return nw;
    }
    //g++ grader.cpp combo.cpp -o combo -O2 -lm -std=c++11
    
  • 相关阅读:
    企业移动化?AppCan教你正确的打开方式
    企业该如何挑选移动平台?
    除了移动开发,一个好平台还需要具备什么功能?
    canvas绘制工作流之绘制节点
    canvas与工作流的不解之缘
    一个工作流引擎诞生前的准备工作
    欢迎大家Follow me!微软MVP罗勇(Dynamics CRM方向2015-2018年)欢迎您!
    Dynamics 365定制:在实体的列表界面添加按钮
    Dynamics 365 Customer Engagement中自定义工作流活动的调试
    Dynamics CRM 2015/2016新特性之二十七:使用Web API查询元数据
  • 原文地址:https://www.cnblogs.com/asuldb/p/12187630.html
Copyright © 2011-2022 走看看