来测试你的代码是否正确
查看原帖
来测试你的代码是否正确
762837
msht2006楼主2023/11/2 21:37

由于一直找不到错误,于是一气之下泄了代码来更好地分析输出

先贴测试代码

#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:显示 答案出错行数 以及 导致出错的输入(询问年份).

例如本人AC代码

#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");
					}
				}
			}
		}
	}
}

溜了

2023/11/2 21:37
加载中...