由于一直找不到错误,于是一气之下泄了代码来更好地分析输出
#include<bits/stdc++.h>
using namespace std;
vector<string> s1;
vector<string> s2;
string scan;
/////
vector<int> lines;
int a,b;
int n;
void GetNumber(string input){
vector<int> Change;
bool flag=0;
for(int i=1;input[i]!='\0';i++){
if(input[i]>='0'&&input[i]<='9'){
Change.push_back(input[i]-'0');
flag=1;
}
}
int Changing=0;
for(int i=1;!Change.empty();i*=10){
Changing+=Change.back()*i;
Change.pop_back();
}
lines.push_back(Changing);
}
int main(){
freopen("putout.txt","r",stdin);
freopen("AnsChecker.txt","w",stdout);
while(cin>>scan)s1.push_back(scan);
if(fclose(stdin)){
printf("\n\n[ERROR!]\n\n");
printf("But your ans may be true.");
return 0;
}
cin.clear();
freopen("ANS.txt","r",stdin);
while(cin>>scan)s2.push_back(scan);
if(s1.size()!=s2.size()){
printf("Length Error!");
return 0;
}
bool flag=0;
for(int i=0;i<s1.size();i++){
if(s1[i]!=s2[i]){
printf("[%d] ",i+1);
printf("Your Ans:");
cout<<s1[i];
printf(" True Ans:");
cout<<s2[i]<<'\n';
flag=1;
}
}
if(!flag)printf("Great!");
if(fclose(stdin)){
printf("\n\n[ERROR!]\n\n");
printf("But your ans may be true.");
return 0;
}
cin.clear();
fclose(stdout);
/////
freopen("AnsChecker.txt","r",stdin);
freopen("PutinChecker.txt","w",stdout);
while(getline(cin,scan)){
if(scan=="Great!"){
printf("Great!");
return 0;
}
else GetNumber(scan);
}
printf("When you putin these datas,your ans are wrong!\n");
fclose(stdin);
cin.clear();
freopen("putin.txt","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d%d",&a,&b);
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d",&a,&b);
if(!lines.empty()){
if(i==lines[0]){
printf("[%d] Y= %d X= %d\n",i,a,b);
lines.erase(lines.begin());
}
}
else return 0;
}
}
一、 将答案保存在名为 ANS 的.txt文件中,并将输入保存在名为 putin 的.txt文件中。 二、 将提交代码、测试代码分别运行。 注:测试代码请在main函数开头输入以下两行 freopen("putin.txt","r",stdin); freopen("putout.txt","w",stdout); 并且将输出格式变成题目要求格式。 三、 接下来会出现三个.txt文件:putout、AnsChecker、PutinChecker。 putout:提交代码的输出。 AnsChecker:显示 答案出错行数 以及 你的答案 与 正确答案。 PutinChecker:显示 答案出错行数 以及 导致出错的输入(询问年份).
#include<cstdio>
#define maxn 50010
int n,m;
long long y[maxn];
int rr[maxn];
int qz[maxn];
int tr[maxn<<2];
int max(int a,int b){
return a>b?a:b;
}
void PushUp(int rt){
tr[rt]=max(tr[rt<<1],tr[rt<<1|1]);
}
void Build(int l,int r,int rt){
tr[rt]=0;
if(l==r){
tr[rt]=rr[l];
return;
}
int mid=(l+r)>>1;
Build(l,mid,rt<<1);
Build(mid+1,r,rt<<1|1);
PushUp(rt);
}
int Query(int L,int R,int l,int r,int rt){
if(L<=l&&r<=R)return tr[rt];
int mid=(l+r)>>1;
int ANS=0;
if(L<=mid)ANS=max(ANS,Query(L,R,l,mid,rt<<1));
if(mid<R)ANS=max(ANS,Query(L,R,mid+1,r,rt<<1|1));
return ANS;
}
int find(int u){
int l=1,r=n+1;
if(y[l]>=u)return l;
while(l<r-1){
int mid=(l+r)>>1;
if(y[mid]<u)l=mid;
else r=mid;
}
return r;
}
int main(){
freopen("putin.txt","r",stdin);
freopen("putout.txt","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%lld%d",&y[i],&rr[i]);
for(int i=2;i<=n;i++){
qz[i]=qz[i-1];
qz[i]+=y[i]-y[i-1]-1;
}
Build(1,n,1);
scanf("%d",&m);
for(int i=1;i<=m;i++){
//printf("[%d] ",i);///为了更好人工分析数据而写
int X,Y;
scanf("%d%d",&Y,&X);
if(X>y[n]&&Y>y[n]){
printf("maybe\n");
continue;
}
int nX,nY,MAX;
nX=find(X),nY=find(Y);
if(nX>n)nX=n;
if(nY>n)nY=n;
if(Y!=y[nY]){
if(X!=y[nX])printf("maybe\n");
else if(nX==nY)printf("maybe\n");
else{
MAX=Query(nY,nX,1,n,1);
if(MAX>rr[nX])printf("false\n");
else{
MAX=Query(nY,nX-1,1,n,1);
if(MAX==rr[nX])printf("false\n");
else printf("maybe\n");
}
}
}
else if(X!=y[nX]){
if(nX==nY+1)printf("maybe\n");
else{
MAX=Query(nY,nX-1,1,n,1);
if(MAX>rr[nY])printf("false\n");
else{
MAX=Query(nY+1,nX-1,1,n,1);
if(MAX==rr[nY])printf("false\n");
else printf("maybe\n");
}
}
}
else{
if(rr[nX]>rr[nY])printf("false\n");
else if(nX==nY+1){
if(qz[nX]-qz[nY])printf("maybe\n");
else printf("true\n");
}
else{
MAX=Query(nY,nX-1,1,n,1);
if(MAX>rr[nY])printf("false\n");
else{
MAX=Query(nY+1,nX-1,1,n,1);
if(MAX>=rr[nX])printf("false\n");
else{
if(qz[nX]-qz[nY])printf("maybe\n");
else printf("true\n");
}
}
}
}
}
}
溜了