zoukankan      html  css  js  c++  java
  • 通信题杂记

    很早就知道UOJ454了。

    今天终于决定写。

    然后发现通信题的运行调试很麻烦,在各种尝试后终于找到了可以正常运行的方法,而且不需要外部辅助。

    把读入写成这样:

    char read(){
        char re=getchar();
        for(;re==-1;re=getchar());
        return(re);
    }
    

    这样读完就会自动等待对面输出。

    然后文操这么写:

    //Alice
    system("del B.out");            //清空文件
    freopen("A.out","w",stdout);    //创建标准输出文件
    while(access("B.out",0)==-1);   
    //等待对方创建标准输出文件,否则在无文件的情况下会直接卡死
    freopen("B.out","r",stdin);     //重定向标准输入,这一行的位置必须位于确认文件存在之后
    
    //Bob
    system("del A.out");            //同上。因为两个程序会先后开,所以先开的那个会把文件占用,后开的删不掉
    freopen("B.out","w",stdout);
    while(access("A.out",0)==-1);
    freopen("A.out","r",stdin);
    

    需要使用 #include<unistd.h> 头文件。

    然后就可以正常运行了。

    附UOJ454 AC代码:

    //Alice
    #include<iostream>
    #include<unistd.h>
    #include<cstdlib>
    #include<fstream>
    #include<string>
    using namespace std;
    ifstream fin;
    char read(){
        char re=getchar();
        for(;re==-1;re=getchar());
        return(re-48);
    }
    void write(int ch){
        putchar(ch+48);
        fflush(stdout);
    }
    int n,m,k=0,te;
    bool s[2010],need[2010];
    char c;
    int main(){
    //  #define DEBUG
    #ifdef DEBUG
        system("del B.out");
        freopen("A.out","w",stdout);
        while(access("B.out",0)==-1);
        freopen("B.out","r",stdin);
    #endif
        
        fin.open("alice.in");
        fin>>n>>m;
        te=(n<<1)/3;
        for(int i=1;i<=n<<1;++i){
            fin>>c;
            s[i]=c-48;
        }
        k=read()<<1;k+=read();
        for(int i=1;i<=te;i++){
            write(s[i+k*te]);
        }
        for(int i=1;i<=te;i++){
            if(read()){
                write(s[i+(k?0:te)]);
            }
        }
        for(int i=1;i<=te;i++){
            if(read()){
                write(s[i+(k<2?te<<1:te)]);
            }
        }
        for(int i=te*3+1;i<=n<<1;i++){
            write(s[i]);
        }
        return(0);
    }
    
    //Bob
    #include<iostream>
    #include<unistd.h>
    #include<fstream>
    #include<string>
    using namespace std;
    ifstream fin;
    char read(){
        char re=getchar();
        for(;re==EOF;re=getchar());
        return(re-48);
    }
    void write(int ch){
        putchar(ch+48);
        fflush(stdout);
    }
    ofstream fout;
    int n,m,te,a[2010],s[3],k;
    bool p[2010],ans[2010];
    int main(){
    //  #define DEBUG
        #ifdef DEBUG
        system("del A.out");
        freopen("B.out","w",stdout);
        while(access("A.out",0)==-1);
        freopen("A.out","r",stdin);
        #endif
        
        fin.open("bob.in");
        fout.open("bob.out");
        fin>>n>>m;
        te=(n<<1)/3;
        for(int i=1;i<=n;++i){
            fin>>a[i];
            p[a[i]]=1;
        }
        for(int i=1;i<=te;i++){
            s[0]+=p[i];s[1]+=p[i+te];s[2]+=p[i+(te<<1)];
        }
        k=s[0]>s[1]?0:1;
        k=s[k]>s[2]?k:2;
        write(k>>1);write(k&1);
        for(int i=1;i<=te;i++){
            ans[i+k*te]=read();
        }
        for(int i=1;i<=te;i++){
            write(p[i+(k?0:te)]);
            if(p[i+(k?0:te)]){
                ans[i+(k?0:te)]=read();
            }
        }
        for(int i=1;i<=te;i++){
            write(p[i+(k<2?te<<1:te)]);
            if(p[i+(k<2?te<<1:te)]){
                ans[i+(k<2?te<<1:te)]=read();
            }
        }
        for(int i=te*3+1;i<=n<<1;i++){
            ans[i]=read();
        }
        for(int i=1;i<=n;i++){
            fout<<ans[a[i]];
        }
        return(0);
    }
    
  • 相关阅读:
    Android安装apk
    Android获取应用程序版本信息
    Handler消息传递机制
    Activity的启动模式
    cocopods的使用
    ios9 的新特性
    静态库的制作详解
    真机调试
    时间差计算(给定两时间,转换为时间差)
    socket 通信机制的实现
  • 原文地址:https://www.cnblogs.com/groundwater/p/14284443.html
Copyright © 2011-2022 走看看