求助(是编译器有问题吗?)
查看原帖
求助(是编译器有问题吗?)
644563
Ming_dao楼主2023/8/27 07:45

T2的代码,我前6个点打表可以过,自己的代码和打表的答案一模一样,为什么只过3个点?

打表代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
	int a;
	cin>>a;
	if(a==1)cout<<"1";
	if(a==0)cout<<"0";
	if(a==2)cout<<"1 2";
	if(a==3)cout<<"1 2 3";
	if(a==4)cout<<"1 4 2 3";
	if(a==5)cout<<"1 5 2 3 4";
	if(a==6)cout<<"1 6 2 4 3 5";
	if(a==7)cout<<"1 7 2 5 4 3 6";
	if(a==8)cout<<"1 8 2 6 4 5 3 7";
	return 0;
} 
自己的代码:
#include<bits/stdc++.h>
#define maxx 1000010
using namespace std;
int ans[maxx];
int main(){
	int n;
	cin>>n;
	int mid;
	if(n%2==0)mid=n/2;
	else mid=n/2+1;
	ans[1]=1;
	ans[2]=n-1;
	ans[n]=n;
	ans[n-1]=2;
	int l=2,r=n-1;
	if(n==2){
		cout<<1<<" "<<2;
		return 0;
	}
	if(n==3){
		cout<<1<<" "<<2<<" "<<3;
		return 0;
	}
	if(n%2==0){
		while(r-l>1){
		int flag_l=0;
		int flag_r=0;
		if(ans[l]>mid){
			ans[++l]=n+2-ans[l-1];
			flag_l=1;
		}
		if(ans[l]<mid&&flag_l==0){
			ans[++l]=n-ans[l-1];
		}
		if(ans[r]>mid){
			ans[--r]=n+2-ans[r+1];
			flag_r=1;
		}
		if(ans[r]<mid&&flag_r==0){
			ans[--r]=n-ans[r+1];
		}
		}
	}
	if(n%2==1){
		while(r-l>2){
		int flag_l=0;
		int flag_r=0;
		if(ans[l]>mid){
			ans[++l]=n+2-ans[l-1];
			flag_l=1;
		}
		if(ans[l]<mid&&flag_l==0){
			ans[++l]=n-ans[l-1];
		}
		if(ans[r]>mid){
			ans[--r]=n+2-ans[r+1];
			flag_r=1;
		}
		if(ans[r]<mid&&flag_r==0){
			ans[--r]=n-ans[r+1];
		}
	}ans[mid]=mid;
	}
	cout<<ans[1]<<" ";
	for(int i=n;i>=2;i--)cout<<ans[i]<<" ";
	return 0;
}

蒟蒻自己实在是想不通,求助大佬。

2023/8/27 07:45
加载中...