zoukankan      html  css  js  c++  java
  • UOJ#405. 【IOI2018】组合动作

    原文链接https://www.cnblogs.com/zhouzhendong/p/IOI2018Day1T1.html

    题解

      首先二分一下,花费2次操作求出第一位的字符。

      假设第一个字符是 Y,答案字符串的长度为 i-1 的前缀是 S,我们考虑如何只花费1次询问得到下一个字符。

      press(SAA,SAB,SAX,SB) - (i-1)

      如果是 0 ,那么下一个字符是 X

      如果是 1 ,那么下一个字符是 B

      如果是 2 ,那么下一个字符是 A

      最后一个字符花费 2次操作暴力询问即可。

      这样刚好需要 n+2 次操作。

    代码

    #include <bits/stdc++.h>
    #include "combo.h"
    using namespace std;
    char c[4]={'A','B','X','Y'};
    string guess_sequence(int n){
    	string ans;
    	if (press("AB"))
    		ans=press("A")?"A":"B";
    	else
    		ans=press("X")?"X":"Y";
    	if (n==1)
    		return ans;
    	for (int i=0;i<3;i++)
    		if (c[i]==ans[0]){
    			swap(c[i],c[3]);
    			break;
    		}
    	for (int i=2;i<n;i++){
    		int tmp=press(ans+c[0]+c[0]+ans+c[0]+c[1]+ans+c[0]+c[2]+ans+c[1])-(i-1);
    		ans+=c[2-tmp];
    	}
    	if (press(ans+c[0])==n)
    		ans+=c[0];
    	else if (press(ans+c[1])==n)
    		ans+=c[1];
    	else
    		ans+=c[2];
    	return ans;
    }
    

      

  • 相关阅读:
    Linux阶段总结
    Java基础单词总结
    毕业设计
    tips: ubuntu apt sources.list 设置
    Java编程从0到1系列 目录
    EnvironmentError: mysql_config not found
    pyenv 2.7 环境安装MySQL-python ERROR
    dtd语法规则
    HashMap和HashTable之间的区别
    Vector(同步)和ArrayList(异步)异同
  • 原文地址:https://www.cnblogs.com/zhouzhendong/p/IOI2018Day1T1.html
Copyright © 2011-2022 走看看