[xsy3553]游戏
题意:交互题,交互库有长为$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]游戏的更多相关文章
- 使用HTML5开发Kinect体感游戏
一.简介 我们要做的是怎样一款游戏? 在前不久成都TGC2016展会上,我们开发了一款<火影忍者手游>的体感游戏,主要模拟手游章节<九尾袭来 >,用户化身四代,与九尾进行对决, ...
- jQuery实践-网页版2048小游戏
▓▓▓▓▓▓ 大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了, ...
- Unity游戏内版本更新
最近研究了一下游戏内apk包更新的方法. ios对于应用的管理比较严格,除非热更新脚本,不太可能做到端内大版本包的更新.然而安卓端则没有此限制.因此可以做到不跳到网页或应用商店,就覆盖更新apk包. ...
- 游戏服务器菜鸟之C#初探一游戏服务
本人80后程序猿一枚,原来搞过C++/Java/C#,因为工作原因最后选择一直从事C#开发,因为读书时候对游戏一直比较感兴趣,机缘巧合公司做一个手游的项目,我就开始游戏服务器的折腾之旅. 游戏的构架是 ...
- iOS审核这些坑,腾讯游戏也踩过
作者:Jamie,专项技术测试工程师,在iOS预审和ASO优化领域从事专项测试相关工作,为腾讯游戏近100个产品提供专项服务. WeTest 导读 在App上架苹果应用商店的过程中,相信大多数iOS开 ...
- 漫谈C#编程语言在游戏领域的应用
0x00 前言 随着微软越来越开放,C#也变得越来越吸引人们的眼球.而在游戏行业中,C#也开始慢慢地获得了关注.这不, 网易绝代双娇手游团队已经全面使用.Net Core支持前后端统一C#开发,跨平台 ...
- 解构C#游戏框架uFrame兼谈游戏架构设计
1.概览 uFrame是提供给Unity3D开发者使用的一个框架插件,它本身模仿了MVVM这种架构模式(事实上并不包含Model部分,且多出了Controller部分).因为用于Unity3D,所以它 ...
- 趣说游戏AI开发:曼哈顿街角的A*算法
0x00 前言 请叫我标题党!请叫我标题党!请叫我标题党!因为下面的文字既不发生在美国曼哈顿,也不是一个讲述美国梦的故事.相反,这可能只是一篇没有那么枯燥的关于算法的文章.A星算法,这个在游戏寻路开发 ...
- 拼图小游戏之计算后样式与CSS动画的冲突
先说结论: 前几天写了几个非常简单的移动端小游戏,其中一个拼图游戏让我郁闷了一段时间.因为要获取每张图片的位置,用`<style>`标签写的样式,直接获取计算后样式再用来交换位置,结果就悲 ...
随机推荐
- ruby中的整数、浮点数、字符串之间的相互转换
D:\learnProg\Ruby>irb#浮点数转换成整数,会强行去掉小数点后面的数字 irb(main):017:0> 123.45.to_i => 123 #整数转换成浮点数, ...
- $.extend(obj1,obj2...,objN)小结 扩展obj1属性,有返回值,返回第一个被扩展后的对象
<script> var obj1 = { name:'liu', age:'24' } var obj2 = { name:'jinyu', sex:'m ...
- Error handling in Swift does not involve stack unwinding. What does it mean?
Stack unwinding is just the process of navigating up the stack looking for the handler. Wikipedia su ...
- 10 Unit Testing and Automation Tools and Libraries Java Programmers Should Learn
转自:https://javarevisited.blogspot.com/2018/01/10-unit-testing-and-integration-tools-for-java-program ...
- yum 安装,可以list,但是无法安装Error downloading packages: 。。。。 No such file or directory
yum 安装,可以list,但是无法安装Error downloading packages: .... No such file or directory # yum install nano Lo ...
- <每日 1 OJ> -内存文件系统
蛮有意思的,主要考查链表和树结构的知识. 代码如下: ************************************************************************* ...
- Java NIO Buffer中各种状态属性的含义
关于NIO Buffer中的3个重要状态属性的含义: postion, limit与capacity. public class NioTest { public static void main(S ...
- opencv 图像resize
这是文档中的函数原型 cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]) 参数说明src:要resize的原图,应该是一个矩阵 dsi ...
- TortoiseSVN is locked in another working copy
TortoiseSVN提交报错 TortoiseSVN is locked in another working copy原因:可能是因为打开了多个commit会话,然后又去修改了提交文件的内容,导致 ...
- EV录屏 --- 免费无水印,集视频录制与直播功能于一身的桌面录屏软件, 支持录屏涂鸦、实时按键显示、视频体积压缩等实用功能
https://www.ieway.cn/index.html 免费无水印,集视频录制与直播功能于一身的桌面录屏软件,支持录屏涂鸦.实时按键显示.视频体积压缩等实用功能 EVCapture 3.9.7 ...