0分求调
查看原帖
0分求调
1097100
taoyize楼主2024/9/29 20:40
#include<bits/stdc++.h>
using namespace std;
#define long long int
const int mx=1e3;
int n,a[mx],b[mx]; 
int ans1=0,ans2=0;
int buf[mx];
void merge(int l,int r,int (&a)[mx],int &ans){
	if(l>=r) return;
	int mid=(l+r)>>1;
	merge(l,mid,a,ans);
	merge(mid+1,r,a,ans);
	int i=l,j=mid+1,st=l;
	while(i<=mid&&j<=r){
		if(a[j]<=a[i]){
			buf[st++]=a[j++];
			ans+=mid-i+1;
		}
		else buf[st++]=a[i++];
	}
	while(i<=mid) buf[st++]=a[i++];
	while(j<=r) buf[st++]=a[j++];
	//for(int q=l;q<=r;q++) a[q]=buf[q];
}

int main(){
	while(cin>>n){
		if(n==0) break;
		memset(a,0,sizeof(a));
		memset(b,0,sizeof(b));
		memset(buf,0,sizeof(buf));
		ans1=0,ans2=0;
		bool flag=false;
		for(int i=1;i<=n*n;i++){
			if(!flag) cin>>a[i];
			else cin>>a[i-1];
			if(a[i]==0) flag=true;
		}
		flag=false;
		for(int j=1;j<=n*n;j++){
			if(!flag) cin>>b[j];
			else cin>>b[j-1];
			if(b[j]==0) flag=true;
		}
		//for(int i=1;i<=n*n-1;i++) cout<<b[i]<<" ";
		merge(1,n*n-1,a,ans1);
		memset(buf,0,sizeof(buf));
		merge(1,n*n-1,b,ans2);
		if((ans1-ans2)%2==0) cout<<"TAK"<<endl;
		else cout<<"NIE"<<endl;
	}
}
2024/9/29 20:40
加载中...