【算法竞赛学习笔记】交互题入门

本文介绍了算法竞赛中的交互题,讲解了交互题的特点、注意事项,并通过CF1167B、CF843B、CF750F三个实例进行深入解析,包括如何处理查询次数限制和查询策略。此外,提供了参考资料链接以供深入学习。
摘要由CSDN通过智能技术生成

title : 交互题
tags : ACM,交互
date : 2022-2-11
author : Linno


交互题

通俗来讲,交互题与平时题目的输入输出反过来,是让你设计程序去向用户提出询问,由用户给出答案,并且在这基础上由程序推断出正确答案的一种形式。在下面第一道例题中会认识到交互题的基本写法。

应用cf上的话说明怎样调整输入输出:
//This is an interactive problem. Remember to flush your output while communicating with the testing program.** You may use fflush(stdout) in C++, system.out.flush() in Java, stdout.flush() in Python or flush(output) in Pascal to flush the output.

注意事项

  • 每一次输出后都要刷新缓冲区,否则会引起 i d l e n e s s   l i m i t   e x c e e d e d idleness\ limit\ exceeded idleness limit exceeded错误,在codeforces中是 W r o n g   A n s w e r Wrong\ Answer Wrong Answer错误。另外,如果题目含多组数据并且程序可以在未读入所有数据时就知道答案,也仍然要读入所有的数据,否则同样会因为读入混乱引起ILE(可以一次提出多个询问,一次接收所有询问的答案)。同时尽量不要使用快读。

  • 交互题一般会限制查询次数或者查询区间,所以要尽量选择最优的查询方法来得出结果,尽可能做到每次查询都能得到完全不一样的信息,以免浪费机会。

例题

CF1167B Lost Numbers

序列a是4,8,15,16,23,42组成的一个排列。给定4次询问,每次回答出两个位置的数之积,求序列a。

#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
#define int long long
using namespace std;
const int N=2e5+7;
const int mod=1e9+7;

int a[]={
   0,4,8,15,16,23,42},d[5];

int gcd(int a,int b){
   
	return b?gcd(b,a%b):a;
}

signed main(){
   
	for(int i=1;i<=4;i++){
   
		cout<<"? "<<i<<" "<<i+1<<"\n";
		fflush(stdout);
		cin>>d[i];
	}
	do{
   
		if(a[1]*a[2]==d[1]&&a[2]*a[3]==d[2]&&a[3]*a[4]==d[3]&&a[4]*a[5]==d[4]){
   
			cout<<"! ";
			for(int i=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RWLinno

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值