题意:交互题,交互库有长为$n$的$01$串$S$,你可以用字符串$T$询问$\sum\limits_{i=1}^n[S_i=T_i]$,要求用$1030$次询问问出$S$,$n=5000$

首先我们可以问出一个集合内有多少个$1$,接下来的询问就是指问集合内$1$的个数,记集合$S$的答案为$ans_S$

我们硬点一个方案的最后一次询问是问总共有多少$1$

如果可以用$k$次询问问出长为$n$的串,那么可以用$2k$次询问问出长为$2n+k-1$的串,构造如下

把串分成三部分:$1\cdots n,n+1\cdots 2n,2n+1\cdots 2n+k-1$,记为$A,B,C$

设对$A$询问的集合为$P_{1\cdots k}$,对$B$询问的集合为$Q_{1\cdots k}$

对$i=1\cdots k-1$,问$P_i\bigcup Q_i$和$(A-P_i)\bigcup Q_i\bigcup\{C_i\}$,倒数第二次问$A$

两个询问结果之和是$ans_A+2ans_{Q_i}+C_i$,和$ans_A$比较奇偶性可以知道$C_i$,继而推出$ans_{Q_i},ans_{P_i}$,做完之后也自然知道了$ans_{Q_k}$,于是递归下去做就行了

当$n=5000$时,这个做法需要$1024$次询问

感觉这个题很巧妙啊?

#include"game.h"
#include<string.h>
#include<vector>
using namespace std;
typedef vector<int> vi;
int n;
string t;
int sum;
int get(vi v){int siz;t=string(n,'1');siz=0;for(int x:v){if(x>n)break;t[x-1]='0';siz++;}return(siz-guess(t)+sum)/2;
}
vi al(int n){vi v;for(int i=1;i<=n;i++)v.push_back(i);return v;
}
vi sh(vi a,int b){for(int&x:a)x+=b;return a;
}
bool us[6010];
vi inv(vi a,int n){vi c;memset(us,0,n+1);for(int x:a)us[x]=1;for(int i=1;i<=n;i++){if(!us[i])c.push_back(i);}return c;
}
vi operator+(vi a,vi b){a.insert(a.end(),b.begin(),b.end());return a;
}
struct sol{int n;vector<vi>a;void add(vi v){a.push_back(v);}
}w[20];
void pre(){int n,k,i,j;vi t;w[1]={2,{{1},{1,2}}};for(i=2;i<=10;i++){k=w[i-1].a.size();n=w[i-1].n;w[i].n=n*2+k-1;for(j=0;j<k-1;j++){vi&u=w[i-1].a[j];w[i].add(u+sh(u,n));t=inv(u,n)+sh(u,n);t.push_back(n*2+j+1);w[i].add(t);}w[i].add(al(n));w[i].add(al(w[i].n));}
}
int res[6010];
void solve(int sh,int id,vi r){if(id==1){res[sh+1]=r[0];res[sh+2]=r[1]-r[0];return;}int n,k,i,c,t,al;vi ra,rb;n=w[id-1].n;k=w[id-1].a.size();c=r[k*2-2];al=r[k*2-1]-c;for(i=0;i<k-1;i++){t=res[sh+n*2+i+1]=((r[i*2]+r[i*2+1])^c)&1;al-=t;rb.push_back(t=(r[i*2]+r[i*2+1]-t-c)/2);ra.push_back(r[i*2]-t);}ra.push_back(c);rb.push_back(al);solve(sh,id-1,ra);solve(sh+n,id-1,rb);
}
const int mx=10;
string game(int _n,int k){n=_n;vi r;string s(n,'1');pre();sum=guess(s);for(vi v:w[mx].a)r.push_back(get(v));solve(0,mx,r);for(int i=0;i<n;i++)s[i]=res[i+1]+'0';return s;
}

转载于:https://www.cnblogs.com/jefflyy/p/11136461.html

[xsy3553]游戏相关推荐

  1. 伍六七带你学算法 进阶篇-生命游戏

    有趣的算法题–生命游戏 难度-中等 根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机. 想要体验生命游戏的小伙伴可以到这里-->生命游戏 进入 ...

  2. 自制青蛙跳台阶小游戏~

    青蛙跳台阶小游戏 1.概念(concept)文档 楔子(Setting):千百年来,人们在贬低别人时,常用井底之蛙来描述那个人,但这却让青蛙不开心了,于是青蛙决定跳出井底,为自己讨一个公道. 玩法(G ...

  3. 用Construct 2制作入门小游戏~

    今天在软导课上了解到了Construct 2这个神器,本零基础菜鸟决定尝试做一个简单的小游戏(实际上是入门的教程啊= = 首先呢,肯定是到官网下载软件啊,点击我下载~ 等安装完毕后我便按照新手教程开始 ...

  4. Intel GPU实现游戏与数据中心

    Intel GPU实现游戏与数据中心 在Intel Architecture Day上,Intel谈到了面向游戏玩家的Xe-HPG架构Alchemist GPU以及面向数据中心的Xe-HPC架构GPU ...

  5. 英特尔 i5-9400F,或将成为本年最高性价比的游戏处理器

    英特尔 i5-9400F,或将成为本年最高性价比的游戏处理器 一直以来,每一代英特尔 i5 系列都是很多游戏玩家主要的选购对象,它和任何一款显卡似乎都能够很好的搭配起来.可凡事都有美中不足的地方,比如 ...

  6. 人脸照片自动生成游戏角色_ICCV2019论文解析

    人脸照片自动生成游戏角色_ICCV2019论文解析 Face-to-Parameter Translation for Game Character Auto-Creation 论文链接: http: ...

  7. [FaceBook]测试、发布和分享小游戏

    FaceBook小游戏 测试.发布和分享小游戏 对于小游戏,您现在可以十分轻松地在本地测试开发版本,自动完成发布流程,以及与团队分享编译版本.本文档会详细说明这些步骤. 通过本地服务器测试游戏 小游戏 ...

  8. OPPO小游戏vConsole开启方法

    OPPO小游戏是不会报红色错误的,要开启vConsole,要在首场景脚本内onLoad里加上以下代码: qg.setEnableDebug({enableDebug: true, // true 为打 ...

  9. 如何把手变成手控_在这个模拟手的VR游戏里,你能体验到很多手控福利

    原标题:在这个模拟手的VR游戏里,你能体验到很多手控福利 前排提示,部分图片可能导致掉San. 如今的电子游戏越来越真实,但始终存在一个局限,那就是玩家通常使用手柄.键鼠等外设来控制角色,没法与游戏实 ...

最新文章

  1. 原创 | 比新基建还火,数字孪生究竟有哪些应用价值?
  2. Java 时间 Date类型,Long类型,String类型
  3. Linux grep不包含某些字符串的命令
  4. 01需求工程-软件建模与分析阅读笔记
  5. 什么是序列化和反序列化
  6. php实现抽象工厂模式(转)
  7. ButterKnife View 注入
  8. jquery 获取元素css的left,top值
  9. json输出count如何计算_基于 Kafka + Flink + Redis 的电商大屏实时计算案例
  10. 《码出高效:Java开发手册
  11. 苹果ios啸叫频点测试软件_啸叫抑制之陷波法
  12. MATLAB聚类分析学习笔记
  13. 9个完整android开源app项目
  14. 怎么在电脑设置html,电脑怎么定时开机
  15. 人工智能:《时代周刊》2019年度100大最佳发明榜单发布!
  16. Frontend Framework
  17. 2014高考英语听力,男约女终于成功了
  18. python自动推送消息_使用Python制作自动推送微信消息提醒的备忘录功能
  19. 服务器系统盘满了(解决方法)
  20. STM32实例-蜂鸣器实验

热门文章

  1. mybatis查询更新
  2. 浅谈量子纠缠,易经,能量,世界(一)
  3. BPM 应用系统开发案例实战
  4. Python黑马程序员学习路线
  5. SDN的两种方式分析
  6. linux ftok函数
  7. 关于java多态性之父类引用指向子类对象
  8. 计算机专业用什么轴的键盘,机械键盘的哪个轴适合办公室使用
  9. C++STL4种关联容器(set、multiset、map和multimap)
  10. 视频教程免费分享:嵌入式stm32项目开发之心率检测仪的设计与实现