• LOJ.2863.[IOI2018]组合动作(交互)


    题目链接

    通过两次可以先确定首字母。然后还剩下(n-1)位,之后每一位只有三种可能。
    最简单的方法是每次确定一位,通过两次询问显然可以确定。但是只能一次询问。
    首字母只会出现一次,即我们可以将串分割成(4)个进行一次询问。我们是可以一次询问确定一位的。
    比如:首字母为(a),其它字母为(bcd)(ans)为已确定的前(i-1)位,则询问(ans+bb+ans+bc+ans+bd+ans+c),就能确定(i)了。
    这样第(n)位需要能单独判断,可以直接用两次。
    那么总询问次数为:(2+n-2+2=n+2)

    #include <string>
    #include <algorithm>
    #include "combo.h"
    
    std::string guess_sequence(int n)
    {
    	char a,b,c,d;
    	std::string ans="";
    	if(press("AB")) c='X', d='Y', press("A")?(b='B',a='A'):(b='A',a='B');
    	else c='A', d='B', press("X")?(b='Y',a='X'):(b='X',a='Y');
    	ans=a;
    	if(n==1) return ans;//!
    	for(int i=1,t; i<n-1; ++i)
    	{
    		if((t=press(ans+b+b+ans+b+c+ans+b+d+ans+c))==i) ans+=d;
    		else if(t==i+1) ans+=c;
    		else ans+=b;
    	}
    	if(press(ans+b)==n) ans+=b;
    	else if(press(ans+c)==n) ans+=c;
    	else ans+=d;
    	return ans;
    }
    
  • 相关阅读:
    vpp编写plugin
    vrf 命令
    vxlan + 多个vrf
    dpdk helloworld
    Go函数高级
    Go_defer
    Go递归函数
    Go作用域
    Go函数
    Go字符串
  • 原文地址:https://www.cnblogs.com/SovietPower/p/9673989.html
Copyright © 2020-2023  润新知