求条,悬一关
查看原帖
求条,悬一关
1170804
zhengyao19楼主2024/11/27 19:00
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
ll n,a1[501*501],a2[501*501],s1,s2,c[501*501];
void merge_sort(ll l,ll r,ll &s,ll a[]){
  if(l>=r) return;
  ll mid=(l+r)/2;
  merge_sort(l,mid,s,a);
  merge_sort(mid+1,r,s,a);
  for(ll i=l,j=mid+1,k=l;i<=mid||j<=r;){
    if(i<=mid&&(a[i]<=a[j]||j>r)){
      c[k++]=a[i++];
    }else{
      c[k++]=a[j++];
      s+=mid-i+1;
    }
  }
  for(ll i=l;i<=r;i++){
    a[i]=c[i];
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  while(cin>>n){
    fill_n(a1,501*501,0);
    fill_n(a2,501*501,0);
    s1=s2=0;
    ll f1=0,f2=0;
    for(ll i=0;i<n;i++){
      for(ll j=1;j<=n;j++){
        cin>>a1[i*n+j-f1];
        if(f1==0&&a1[i*n+j]==0){
          f1=1;
        }
      }
    }
    for(ll i=0;i<n;i++){
      for(ll j=1;j<=n;j++){
        cin>>a2[i*n+j];
        if(f2==0&&a2[i*n+j]==0){
          f2=1;
        }
      }
    }
    n=n*n;
    n--;
//    for(ll i=1;i<=n;i++) cout<<a1[i]<<" ";
//    cout<<"\n";
//    for(ll i=1;i<=n;i++) cout<<a2[i]<<" ";
//    cout<<"\n";
    merge_sort(1,n,s1,a1);
    merge_sort(1,n,s2,a2);
    if(s1%2==s2%2) cout<<"TAK\n";
    else cout<<"NIE\n";
  }
  return 0;
}

2024/11/27 19:00
加载中...