【玄关】关于交互库的问题
  • 板块学术版
  • 楼主Lele_Programmer
  • 当前回复10
  • 已保存回复10
  • 发布时间2024/10/4 11:35
  • 上次更新2024/10/4 14:35:42
查看原帖
【玄关】关于交互库的问题
961972
Lele_Programmer楼主2024/10/4 11:35

最近对 testlib 的 I/O 交互方面比较感兴趣,官方文档也看懂了,比如 P1733 这道题,交互库的代码也看懂了,但是怎么在本地运行呢?

如果我交互库 lib.cpp 这么写:

#include "testlib.h"
#include <bits/stdc++.h>
using namespace std;

#define endl '\n'
#define FRR(file) freopen(file,"r",stdin)
#define FRW(file) freopen(file,"w",stdout)
#define _rep(i,a,b) for (int i=(a);i<=(b);++i)
#define _reps(i,a,b,c) for (int i=(a);i<=(b);c)
#define _rrep(i,a,b) for (int i=(a);i>=(b);--i)
#define _rreps(i,a,b,c) for (int i=(a);i>=(b);c)
#define _iter(i,a) for (auto i=a.begin();i!=a.end();++i)
#define _graph(i,u) for (int i=h[u];~i;i=ne[i])
#define rint register int
#define LL long long
typedef pair<int,int> pii;

LL result; // [1,1e18]
int cnt;
int maxCnt=60;

int main(int argc,char* argv[]) {
    registerInteraction(argc,argv);
    result=inf.readLong();
    cout.flush();
    while (true) {
        int op;
        LL n;
        op=ouf.readInteger(1,2);
        n=ouf.readLong(1,1000000000000000000);
        ouf.readEoln();
        if (op==2) {
            if (n==result && cnt<=maxCnt) quitf(_ok,"Accepted! 0");
            else quitf(_wa,"Wrong Answer 1");
        }
        cnt++;
        if (n>result) cout<<1<<endl;
        else if (n<result) cout<<-1<<endl;
        else cout<<0<<endl;
        cout.flush();
    }
}

用户代码 user.cpp 这么写:

#include <bits/stdc++.h>
using namespace std;

#define int long long

#define endl '\n'
#define FRR(file) freopen(file,"r",stdin)
#define FRW(file) freopen(file,"w",stdout)
#define TIMESTAMP cerr<<fixed<<setprecision(3)<<clock()*1.0/CLOCKS_PER_SEC<<"s"<<endl;
#define _rep(i,a,b) for (int i=(a);i<=(b);++i)
#define _reps(i,a,b,c) for (int i=(a);i<=(b);c)
#define _rrep(i,a,b) for (int i=(a);i>=(b);--i)
#define _rreps(i,a,b,c) for (int i=(a);i>=(b);c)
#define _iter(i,a) for (auto i=a.begin();i!=a.end();++i)
#define _graph(i,u) for (int i=h[u];~i;i=ne[i])
#define rint register int
#define LL long long
typedef pair<int,int> pii;

int ask(int k) {
    printf("1 %lld\n",k);
    fflush(stdout);
    int res;
    scanf("%lld",&res);
    return res;
}

void get(int k) {
    printf("2 %lld\n",k);
    fflush(stdout);
}

signed main() {
    fflush(stdout);
    int l=1,r=1000000000000000000;
    while (l<r) {
        int mid=l+r>>1;
        int k=ask(mid);
        if (k==0) {
            get(mid);
            return 0;
        } else if (k<0) l=mid+1;
        else r=mid;
    }
    get(r);
    return 0;
}

我想用 CMD 命令行运行,如何使它们成功交互起来?

给出一些或许有用的信息:

要猜的数字 data.in
评测机向用户程序发送的内容 toUser.out
用户程序向评测机发送的内容 toLib.out
testlib quitf 反馈的结果文件 data.res
2024/10/4 11:35
加载中...