求助玄学错误
查看原帖
求助玄学错误
745929
Komeijizen楼主2024/10/31 20:36

完全一样的代码,用%2就挂,用&1就能A,在锣鼓和acwing上一样
难道数据里有会导致ans<0的神必情况(?

#include<bits/stdc++.h>
using namespace std;
const int N=5e5;
int n,t,m;
int A[N],B[N],ans1,ans2;
int merge(int l,int r){
    int cur=0,mid=(l+r)>>1;
    if(l>=r)return 0;
    cur+=merge(l,mid);
    cur+=merge(mid+1,r);
    int i=l,j=mid+1;
    for(int k=l;k<=r;k++){
        if(j>r or i<=mid and A[i]<=A[j])B[k]=A[i++];
        else B[k]=A[j++],cur+=(mid-i+1);
    }
    for(int k=l;k<=r;k++)A[k]=B[k];
    return cur;
   
}
void solve(){
    memset(A,0,sizeof A);
    memset(B,0,sizeof B);
    m=n*n-1;
    for(int i=1,pnt=1;i<=n;i++){
        for(int j=1;j<=n;j++,pnt++){
            cin>>t;
            if(t)A[pnt]=t;
            else pnt--;
        }
    }
    ans1=merge(1,m);
    memset(A,0,sizeof A);
    memset(B,0,sizeof B);
    for(int i=1,pnt=1;i<=n;i++){
        for(int j=1;j<=n;j++,pnt++){
            cin>>t;
            if(t)A[pnt]=t;
            else pnt--;
        }
    }
    ans2=merge(1,m);
    
    if((ans1&1)==(ans2&1))puts("TAK");
    //此处
    else puts("NIE");
}
int main(){
    while(cin>>n){
        solve();
    }
}
2024/10/31 20:36
加载中...