题意:交互题,交互库有长为$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;
}

[xsy3553]游戏的更多相关文章

  1. 使用HTML5开发Kinect体感游戏

    一.简介 我们要做的是怎样一款游戏? 在前不久成都TGC2016展会上,我们开发了一款<火影忍者手游>的体感游戏,主要模拟手游章节<九尾袭来 >,用户化身四代,与九尾进行对决, ...

  2. jQuery实践-网页版2048小游戏

    ▓▓▓▓▓▓ 大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了, ...

  3. Unity游戏内版本更新

    最近研究了一下游戏内apk包更新的方法. ios对于应用的管理比较严格,除非热更新脚本,不太可能做到端内大版本包的更新.然而安卓端则没有此限制.因此可以做到不跳到网页或应用商店,就覆盖更新apk包. ...

  4. 游戏服务器菜鸟之C#初探一游戏服务

    本人80后程序猿一枚,原来搞过C++/Java/C#,因为工作原因最后选择一直从事C#开发,因为读书时候对游戏一直比较感兴趣,机缘巧合公司做一个手游的项目,我就开始游戏服务器的折腾之旅. 游戏的构架是 ...

  5. iOS审核这些坑,腾讯游戏也踩过

    作者:Jamie,专项技术测试工程师,在iOS预审和ASO优化领域从事专项测试相关工作,为腾讯游戏近100个产品提供专项服务. WeTest 导读 在App上架苹果应用商店的过程中,相信大多数iOS开 ...

  6. 漫谈C#编程语言在游戏领域的应用

    0x00 前言 随着微软越来越开放,C#也变得越来越吸引人们的眼球.而在游戏行业中,C#也开始慢慢地获得了关注.这不, 网易绝代双娇手游团队已经全面使用.Net Core支持前后端统一C#开发,跨平台 ...

  7. 解构C#游戏框架uFrame兼谈游戏架构设计

    1.概览 uFrame是提供给Unity3D开发者使用的一个框架插件,它本身模仿了MVVM这种架构模式(事实上并不包含Model部分,且多出了Controller部分).因为用于Unity3D,所以它 ...

  8. 趣说游戏AI开发:曼哈顿街角的A*算法

    0x00 前言 请叫我标题党!请叫我标题党!请叫我标题党!因为下面的文字既不发生在美国曼哈顿,也不是一个讲述美国梦的故事.相反,这可能只是一篇没有那么枯燥的关于算法的文章.A星算法,这个在游戏寻路开发 ...

  9. 拼图小游戏之计算后样式与CSS动画的冲突

    先说结论: 前几天写了几个非常简单的移动端小游戏,其中一个拼图游戏让我郁闷了一段时间.因为要获取每张图片的位置,用`<style>`标签写的样式,直接获取计算后样式再用来交换位置,结果就悲 ...

随机推荐

  1. java 泛型 类型作为参量 Class<T> transform

    Class<T> transform T:作为类型,用于定义变量: transform:作为具体类的类:用于创建实例. 类型信息是脱敏的具体类: 可以使用class的具体功能: 不能使用具 ...

  2. Angular、React、Vue是什么?

    基于js语言的UI(组件)管理库 +数据+交互+组织 相当于iOS的uikit(UIView)

  3. For 32-bit BOOL is a signed char, whereas under 64-bit it is a bool.

    https://stackoverflow.com/questions/31267325/bool-with-64-bit-on-ios/31270249#31270249 Definition of ...

  4. Virtual DOM的渲染机制--猜测

    一个node的状态发生变化: 会对当前结点和子节点的数据全部进行更新: 然后进行dom比较: 比较完毕后一次性提交: 相对于以前的渲染方式: 每一个node的数据发生变化,都会产生一次渲染提交: 以上 ...

  5. Java Polymorphism

    Ability of an organism to take different shapes is polymorphism in bio world. A simplest definition ...

  6. Windows下PHP7/5.6以上版本 如何连接Oracle 12c,并使用PDO

    https://blog.csdn.net/houpanqi/article/details/78841928 首先,本篇文章重点分享的是:在Win平台下,如何使用PHP7连接Oracle 12C,所 ...

  7. Linux/Windows 配置config 使用ssh连接

    Linux 产看本地是否有ssh 公私钥 1 cd ~/.ssh 2 ls -a 有的话继续(没有 ssh-keygen 生成) 将公钥内容复制到要连接的服务器用户下 方法一 ssh-copy-id ...

  8. 原生js如何判断元素出现在可视区

    元素出现在可视区 scorll滑动的距离>=当前元素距离浏览器最顶端的高度+当前元素自身的高度-当前可视区的高度 触底 scorll滑动的距离>=当前scroll总高度-当前可视区的高度

  9. 2019 NOIP 夏令营(模拟赛1)

    一来到夏令营,第一天上机就考试, 哎,简直不让人活了 这难道是给我们的见面礼??? A https://www.luogu.org/problemnew/show/P1197 #include< ...

  10. 《jmeter接口自动化与性能实战-飞天小子.pdf》

    Jmeter作为开源测试工具,以其轻便,功能齐全的优点,正越来越受到企业的重视.作为纯java的工具,它的扩展性无比强大,既可以做功能测试,也可以做性能测试:既支持接口层面的测试,也支持webdriv ...