[loj2863]组合动作

Posted pywbktda

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[loj2863]组合动作相关的知识,希望对你有一定的参考价值。

先用两次猜出第一个字符,后面就不会出现这个字符了 (我们假设这个字符是c0,其余三种字符分别是c1、c2和c3) ,然后考虑已知s的前i个字符(不妨就s),来推出后面的字符
询问:s+c1和s+c2,如果不是就是c3了,期望是5/3n次的
询问:s+c1+s+c2+c1+s+c2+c2+s+c2+c3(很神奇)
如果长度是i+2,那么就是c2;如果长度是i+1,那么就是c1;否则就是c3
然而s的长度是4i+7的,当|s|=n-1,是4n+3,需要第一种做法,最多2次
那么最坏的次数是2+n-2+2=n+2次,即题中的上限

技术图片
 1 #include<bits/stdc++.h>
 2 #include "combo.h"
 3 using namespace std;
 4 string guess_sequence(int n)
 5     char c[4]=A,B,X,Y;
 6     if (press("XY"))
 7         if (press("X"))swap(c[0],c[2]);
 8         else swap(c[0],c[3]);
 9     else
10         if (press("B"))swap(c[0],c[1]);
11     string s;
12     s+=c[0];
13     if (n==1)return s;
14     for(int i=2;i<n;i++)
15         int k=press(s+c[2]+s+c[3]+c[1]+s+c[3]+c[2]+s+c[3]+c[3]);
16         s+=c[1+(k>=i)+(k>i)];
17     
18     if (press(s+c[1]+s+c[2])<n)s+=c[3];
19     else s+=c[(press(s+c[2])==n)+1];
20     return s;
21 
View Code

 

以上是关于[loj2863]组合动作的主要内容,如果未能解决你的问题,请参考以下文章

LOJ 6160 二分图染色 (dp,组合数学)

LOJ6077「2017 山东一轮集训 Day7」逆序对 生成函数+组合数+DP

Cocos2d-x手机游戏开发中-组合动作

如何将两个动作组合在一起

动作需要 Swagger 的唯一方法/路径组合

对事务的深入理解