概念
交互题,顾名思义,就是电脑和评测机交流,然后得出数据的题目,这种题往往与传统题相差不了太多,一点注意事项待会仔细说。
例题
1. Guess the Number
题目传送门
就是一个二分的交互题,相信有些同学已经写出这样的代码了:
#include<bits/stdc++.h>
using namespace std;
int l=1,r=1000000;
char s[2];
int main(){
while(l+1<r){
int m=(l+r)/2;
printf("%d\n",m);
scanf("%s",s);
if(s[0]=='<')
r=m-1;
else
l=m;
}
printf("%d\n",r);
scanf("%s",s);
if(s[0]=='<')
printf("! %d",l);
else
printf("! %d",r);
}
然后就开开心心的提交,开开心心的ILE了。
我不服,为啥我没有AC?
你问我我问谁是因为你没有刷新缓冲区。
每输出一次,就要刷新缓冲区,那怎么刷新呢?
怎么刷新缓冲区
c/c++(scanf):fflush(stdout)
c++(cin):cout<<flush
pascal:flush(output)
java:System.out.flush()
python:stdout.flush()
什么,这些都不是你的编程语言?自己上网查!
然后我们就能写对了:
#include<bits/stdc++.h>
using namespace std;
int l=1,r=1000000;
char s[2];
int main(){
while(l+1<r){
int m=(l+r)/2;
printf("%d\n",m);
fflush(stdout);
scanf("%s",s);
if(s[0]=='<')
r=m-1;
else
l=m;
}
printf("%d\n",r);
fflush(stdout);
scanf("%s",s);
if(s[0]=='<')
printf("! %d",l);
else
printf("! %d",r);
fflush(stdout);
}
2. 1505A. Is it rated - 2
题目传送门
很简单的一道题,直接看代码:
#include<bits/stdc++.h>
using namespace std;
char s[101];
bool b=true;
int n;
int main(){
while(1){
n=0;
char c;
while(c=getchar(),c!=EOF){
if(c=='\n')
break;
s[++n]=c;
}
if(c==EOF)
break;
printf("No\n");
fflush(stdout);
}
}
没写fflush(stdout)
的给我自主站起来