cf 交互题

今天cf遇到了交互题,这个交互题的算法很很很简单,但是在交互上卡了,导致交上的代码都不算罚时。(更伤心了。

所以,现在写一下交互题的做法,印象深刻嘛。

交互题,就是跟机器进行交互。你代码运行程序发出的东西会影响机器向你传来的东西,即输入跟上次输出有关系。

对于c++,要用

cpp 复制代码
flush(stdout);
// 或者
cout.flush();
// 或者
cout<<endl;

使用这些主要是为了:刷新标准输出缓冲区,让之前输入可能得到的输出序列刷新,得到新的输出序列。

如何做题?

传统算法题的交互相当于跟已经输入的冷漠的数据进行交互,但是交互题相当于跟一个人进行交谈。注意刷新缓冲区和,算法逻辑跟传统的一样。其实,还是要做题,我没做题前,感觉交互题不就是记得刷新一下缓冲区的么,其他有什么区别?,但在实际中感觉还是有一点不一样。

在div2 897场的C题,就是一道交互题,是在cf赛中第一次遇到。读完题感觉算法就有了:读入S进行记录,从0开始递增判断是否在S里,第一个不在S里的数输出,之后输入什么,就输出什么就行。

这一题把交互去掉,其实就是一个很简单的博弈题。但是,这个交互我写错了,我把他当作传统题来写了:找到第一个不在S里的数输出,之后输入,然后判断输出-1结束。

cpp 复制代码
void solve() {
	int n; cin>>n;
	vector<int> a(n);
	map<int,int> mii;
	for(auto &t: a) cin>>t,mii[t] = 1;
	int y;
	int sd = 0;
	while(mii[sd] == 1) sd++;
	cout<<sd<<'\n';
	fflush(stdout);
	cin>>y;
	if(y == -1) return;
	cout<<y<<'\n';
	fflush(stdout);
	puts("");
	cin>>y;
	if(y == -1) return ;
}

但是缺忘记Bob即使会失败但是他可能还会去尝试。这点跟传统算法题不一样,传统博弈都是每个人都是最优的策略。这个感觉Bob笨笨的。(

cpp 复制代码
void solve() {
	int n; cin>>n;
	vector<int> a(n);
	map<int,int> mii;
	for(auto &t: a) cin>>t,mii[t] = 1;
	int y;
	int sd = 0;
	while(mii[sd] == 1) sd++;

	while(1) {
		cout<<sd<<endl;
        // cout<<st<<'\n'; fflush(stdout); # 都可以
		cin>>y;
		if(y == -1) return;
		sd = y;
	}
}
相关推荐
luj_17688 小时前
星火科技助力边远地区防病攻坚
c语言·开发语言·c++·经验分享·算法
geats人山人海11 小时前
数据结构第六章c语言 树的存储下二叉树的概念和存储
c语言·数据结构·算法
漂流瓶jz12 小时前
UVA-12627 奇怪的气球膨胀 题解答案代码 算法竞赛入门经典第二版
算法·图论·递归·aoapc·算法竞赛入门经典·uva·12627
jarvisuni12 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·javascript·算法
kobesdu12 小时前
流形上的优化:SO(3)与SE(3)的广义加减法在FAST-LIO中如何简化状态估计
人工智能·算法·fastlio
白狐_79812 小时前
408 数据结构算法题 01:线性表暴力求解保分指南
java·数据结构·算法
乐观勇敢坚强的老彭13 小时前
C++信奥:开关门、开关灯问题
开发语言·c++·算法
冻柠檬飞冰走茶13 小时前
PTA基础编程题目集 7-31 字符串循环左移(C语言实现)
c语言·开发语言·数据结构·算法
Hi李耶13 小时前
【LeetCode】4-寻找两个正序数组的中位数
算法·leetcode·职场和发展
图灵机z13 小时前
【算法提高课】AcWing 1027. 方格取数 长期攻克提高课-day3(3/219)
算法