zoukankan      html  css  js  c++  java
  • [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
  • 相关阅读:
    Debian vim没有颜色的解决办法
    第四次作业
    第三次作业
    第二次作业
    Mad Libs游戏 & 华氏温度与摄氏温度转换
    有趣故事
    Mybatis的使用及增删改查
    jdbc数据连接池
    详解MySQL数据类型
    SQL语法大全
  • 原文地址:https://www.cnblogs.com/PYWBKTDA/p/11523506.html
Copyright © 2011-2022 走看看