UOJ#454. 【UER #8】打雪仗
UOJ#454. 【UER #8】打雪仗
http://uoj.ac/problem/454
分析:
- 好玩的通信题~
- 把序列分成三块,\(bob\)先发出这三块中询问点最多的一块给\(alice\)。
- 对于这一块,显然点数大于等于\(\frac{n}{3}\),全部由\(alice\)输出。
- 对于剩下的两块,先由\(bob\)告诉是否应该输出,\(alice\)再决定是否输出。
- 这样,\(alice\)的次数是\(667+\frac{2n}{3}\),\(bob\)的次数是\(2+\frac{4n}{3}\),均小于\(1350\),可以通过此题。
代码:
#include <iostream>
#include <fstream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cstdlib>
using namespace std;
char w[2050];
void pr(char s) {putchar(s);fflush(stdout);
}
int L[4],R[4];
int main() {FILE *fp=fopen("alice.in","r");int n,m;fscanf(fp,"%d%d%s",&n,&m,w+1);fclose(fp);int i;int block=667;L[1]=1; R[1]=block; L[2]=block+1; R[2]=block*2; L[3]=R[2]+1; R[3]=2*n; int x=getchar()-'0',y=getchar()-'0';x=x*2+y;for(i=L[x];i<=R[x];i++) pr(w[i]);for(i=1;i<L[x];i++) {y=getchar();if(y=='1') pr(w[i]);}for(i=R[x]+1;i<=2*n;i++) {y=getchar();if(y=='1') pr(w[i]);}
}
#include <iostream>
#include <fstream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cstdlib>
using namespace std;
char w[2050];
void pr(char s) {putchar(s);fflush(stdout);
}
void print(int x) {pr(x/2+'0'); pr((x&1)+'0');
}
int n,m,p[2050],is[2050],L[4],R[4];
int main() {FILE *fp=fopen("bob.in","r");int n,m,i;fscanf(fp,"%d%d",&n,&m);for(i=1;i<=n;i++) fscanf(fp,"%d",&p[i]),is[p[i]]=1;fclose(fp);int block=667,c1=0,c2=0,c3=0;for(i=1;i<=block;i++) c1+=is[i];for(i=block+1;i<=2*block;i++) c2+=is[i];for(i=block*2+1;i<=2*n;i++) c3+=is[i];L[1]=1; R[1]=block; L[2]=block+1; R[2]=block*2; L[3]=R[2]+1; R[3]=2*n; int x=0;if(c1>=333) x=1;if(c2>=333) x=2;if(c3>=333) x=3;print(x);for(i=L[x];i<=R[x];i++) w[i]=getchar();for(i=1;i<L[x];i++) {pr(is[i]+'0');if(is[i]) w[i]=getchar();}for(i=R[x]+1;i<=2*n;i++) {pr(is[i]+'0');if(is[i]) w[i]=getchar();}fp=fopen("bob.out","w");for(i=1;i<=n;i++) fprintf(fp,"%c",w[p[i]]);
}
转载于:https://www.cnblogs.com/suika/p/10205947.html
UOJ#454. 【UER #8】打雪仗相关推荐
- [UOJ#454][UER#8]打雪仗
xx 转载于:https://www.cnblogs.com/lxzl/p/10324980.html
- 【UOJ 454】打雪仗(通信题)(分块)
打雪仗 题目链接:UOJ 454 题目大意 通信题. 两个人 A 有一个 2n 的 01 的字符串,B 有 n 个要知道的位置. 两个人可以传 01 给对方,然后最多的人不能传超过 4/3n(会多一点 ...
- UOJ #454.【UER #8】打雪仗 通信题
题意 有两个人Alice和Bob,现在Alice有一个长度为2n的01串,Bob有n个位于[1,2n]之间的下标,现在要求Alice和Bob之间传递信息,每次只能发送0或1,要求每人发送次数不超过m, ...
- UOJ #455 [UER #8]雪灾与外卖 (贪心、模拟费用流)
题目链接 http://uoj.ac/contest/47/problem/455 题解 模拟费用流,一个非常神奇的东西. 本题即为WC2019 laofu的讲课中的Problem 8,经典的老鼠进洞 ...
- [UOJ#245][UER#7B]天路
Description 给出n个数,对于每个k(2<=k<=n),求出最大的一个ans,使得存在一个连续的长度为k的区间中最大值和最小值的差为ans. 答案与标准答案的误差不超过5%即为正 ...
- 【UOJ】UER#3.B 开学前的日历
将条件转化为i,j⩾0,i+j⩾k|Av+i,u+j+=(i+ji)i,j⩾0,i+j⩾k|Av+i,u+j+=(i+ji)i,j\geqslant 0,i+j\geqslant k|A_{v+i,u ...
- 2018十二月刷题列表
Preface \(2018\)年的尾巴,不禁感慨自己这一年的蜕变只能用蜕变来形容了. 而且老叶说我们今年没的参加清北冬令营可以参加CCF在广州二中举办的冬令营,只要联赛\(390+\)就应该可以报. ...
- 【UER #8】打雪仗
题目:http://uoj.ac/contest/47/problem/454 第一次做通信题,看了半天才搞懂是什么意思. 考虑把字符串拆成三段,每段长度为$\frac{2}{3}n$ 对于B: 统计 ...
- UOJ#454-[UER #8]打雪仗【通信题】
正题 题目链接:https://uoj.ac/problem/454 题目大意 AliceAliceAlice有一个长度为2n2n2n的010101串,BobBobBob有nnn个在[1,2n][1, ...
最新文章
- 2022-2028年中国文化旅游业投资分析及前景预测报告(上中下卷)
- java 做登录跳转404_springboot 访问路径错误跳转到404(实现方法一)
- php数字转英文,PHP金额数字转换成英文
- 144.⑨要写信(错排公式与高精度练习)
- mysql三大范式 答案_数据库三大范式的个人理解~!
- .NET 6新特性试用 | 总结:我最喜欢的5个特性
- html插入图片和文字,HTML第三课文字图片插入
- SharePoint 2016文档库所在数据库表的说明(文档库数据库)
- 网站开发中很有用的几个 jQuery 地图插件
- cmake使用教程(五)调用opencv外部库和自己生成的库
- 前端实现3D魔方旋转特效
- 人脸识别图片base64编码,Java实现
- QT 设置label内字体,字体颜色,背景色 ; 字体的中英对照
- 技术人员应该具备的几项基本技能
- 什么是预言机(oracle)
- form窗口上放一个label,如何能找到这个label在哪个文件中使用
- Learning Representations For Images With Hierarchical Labels(一、二)
- Random随机生成几位数字和UUID随机生成几位字母加数字组合
- 56,选择怪call,普通攻击,释放技能call,自己数据
- 计算机网络中常见的交换机和路由器的品牌