• 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]]);
    }
    
  • 相关阅读:
    loadrunner12-参数化以及参数化关联
    loadrunner--vugen录制脚本提示“无Internet访问。您可能无法录制并执行业务进程”
    loadrunner--web_url函数用法
    loadrunner12-用Chrome如何录制脚本
    LoadRunner--Analysis各项指标详解
    Windows Error Code(windows错误代码详解)
    CentOS 7 (Linux) 下载百度网盘大文件
    博客园cnblogs:自定义页面风格
    Windows Server 2003 添加“Resin”到“服务”出错
    转:mysql分页原理和高效率的mysql分页查询语句
  • 原文地址:https://www.cnblogs.com/suika/p/10205947.html
Copyright © 2020-2023  润新知