5 条题解

  • 3
    @ 2021-8-7 18:39:46

    C++ :

    #include<bits/stdc++.h>
    #define ll long long
    #define inf 0x3f3f3f3f
    using namespace std;
    const int N=1e6+5;
    int n;
    ll a[N];
    int lowbit(int x)
    {
        return x&(-x);
    }
    void add(int x)
    {
        for (int i=x;i<=n;i+=lowbit(i))
        a[i]++;
    }
    ll sum(int x)
    {
       // cout<<x<<endl;
        ll s=0;
        for (int i=x;i>=1;i-=lowbit(i))
        s+=a[i];
        return s;
    }
    int main()
    {
        while(scanf("%d",&n)!=EOF)
        {
            n*=n;
            ll ans1=0,ans2=0;
            int x;
            memset(a,0,sizeof(a));
            for (int i=1;i<=n;i++)
            {
                scanf("%d",&x);
                if (x)
                {
                    ans1+=sum(n)-sum(x);
                    add(x);
                }
            }
            memset(a,0,sizeof(a));
            for (int i=1;i<=n;i++)
            {
                scanf("%d",&x);
                if (x)
                {
                    ans2+=sum(n)-sum(x);
                    add(x);
                }
            }
            if ((ans1%2)==(ans2%2)) printf("TAK\n"); else printf("NIE\n");
        }
        return 0;
    }
    
    • 1
      @ 2025-4-19 22:05:40

      #include<bits/stdc++.h> #define ll long long #define inf 0x3f3f3f3f using namespace std; const int N=1e6+5; int n; ll a[N]; int lowbit(int x) { return x&(-x); } void add(int x) { for (int i=x;i<=n;i+=lowbit(i)) a[i]++; } ll sum(int x) { // cout<<x<<endl; ll s=0; for (int i=x;i>=1;i-=lowbit(i)) s+=a[i]; return s; } int main() { while(scanf("%d",&n)!=EOF) { n*=n; ll ans1=0,ans2=0; int x; memset(a,0,sizeof(a)); for (int i=1;i<=n;i++) { scanf("%d",&x); if (x) { ans1+=sum(n)-sum(x); add(x); } } memset(a,0,sizeof(a)); for (int i=1;i<=n;i++) { scanf("%d",&x); if (x) { ans2+=sum(n)-sum(x); add(x); } } if ((ans1%2)==(ans2%2)) printf("TAK\n"); else printf("NIE\n"); } return 0; }

          1. ~^^~
      • 0
        @ 2025-3-29 18:57:55

        #include #include #include #define N 510000 using namespace std; typedef long long LL; int bst[N],n; inline int lowbit(int x){return x&-x;} void ins(int x) { while(x<=n) { bst[x]++; x+=lowbit(x); } } int findans(int x) { int ans=0; while(x>=1) { ans+=bst[x]; x-=lowbit(x); } return ans; } int a[N],b[N],c[N]; inline bool cmp(int x,int y){return a[x]<a[y];} int main() { a[0]=-9999; while(1) { memset(bst,0,sizeof(bst)); scanf("%d",&n); if(n==0)break; for(int i=1;i<=n;i++){scanf("%d",&a[i]);b[i]=i;} sort(b+1,b+n+1,cmp); int cnt=0; for(int i=1;i<=n;i++) { if(a[b[i]]!=a[b[i-1]])cnt++; c[b[i]]=cnt; } LL ans=0; for(int i=1;i<=n;i++) { ans+=i-1-findans(c[i]);ins(c[i]); } printf("%lld\n",ans); } return 0; }

        • 0
          @ 2024-5-28 16:44:44
          #include<bits/stdc++.h>
          #define ll long long
          #define inf 0x3f3f3f3f
          using namespace std;
          const int N=1e6+5;
          int n;
          ll a[N];
          int lowbit(int x)
          {
              return x&(-x);
          }
          void add(int x)
          {
              for (int i=x;i<=n;i+=lowbit(i))
              a[i]++;
          }
          ll sum(int x)
          {
             // cout<<x<<endl;
              ll s=0;
              for (int i=x;i>=1;i-=lowbit(i))
              s+=a[i];
              return s;
          }
          int main()
          {
              while(scanf("%d",&n)!=EOF)
              {
                  n*=n;
                  ll ans1=0,ans2=0;
                  int x;
                  memset(a,0,sizeof(a));
                  for (int i=1;i<=n;i++)
                  {
                      scanf("%d",&x);
                      if (x)
                      {
                          ans1+=sum(n)-sum(x);
                          add(x);
                      }
                  }
                  memset(a,0,sizeof(a));
                  for (int i=1;i<=n;i++)
                  {
                      scanf("%d",&x);
                      if (x)
                      {
                          ans2+=sum(n)-sum(x);
                          add(x);
                      }
                  }
                  if ((ans1%2)==(ans2%2)) printf("TAK\n"); else printf("NIE\n");
              }
              return 0;
          }
          //钟鼎皓
          
          • 0
            @ 2022-10-15 19:45:30
            #include <cstring>
            #include <algorithm>
            
            using namespace std;
            
            typedef long long LL;
            const int N = 250000;
            int c[N], temp[N];
            
            LL merge_sort(int l, int r, int a[])
            {
                if(l >= r) return 0;
                int mid = l + r >> 1, i = l, j = mid + 1, k = 0;
                LL res = merge_sort(l, mid, a) + merge_sort(mid + 1, r, a);
                while(i <= mid && j <= r)
                {
                    if(a[i] <= a[j]) temp[k++] = a[i++];
                    else 
                    {
                        res += mid - i + 1;
                        temp[k++] = a[j++];
                    }
                }
                while(i <= mid) temp[k++] = a[i++];
                while(j <= r) temp[k++] = a[j++];
                for(int i = l, j = 0; i <= r; i++, j++) a[i] = temp[j];
                return res;
            }
            
            int main()
            {
                int n;
                while(cin >> n && n)
                {
                    int a[N], b[N];
                    for(int i = 0, j = 0; i < n * n; i++) 
                    {
                        cin >> c[i];
                        if(c[i]) a[j++] = c[i];
                    }
                    for(int i = 0, j = 0; i < n * n; i++) 
                    {
                        cin >> c[i];
                        if(c[i]) b[j++] = c[i];
                    }
                    LL res1 = merge_sort(0, n * n - 1, a);
                    memset(temp, 0, sizeof temp);
                    LL res2 = merge_sort(0, n * n - 1, b);
                    memset(temp, 0, sizeof temp);
                    if((res1 % 2) == (res2 % 2)) puts("TAK");
                    else puts("NIE");
                }
                return 0;
            }
            
            
          • 1

          信息

          ID
          20
          时间
          1000ms
          内存
          128MiB
          难度
          1
          标签
          递交数
          131
          已通过
          97
          上传者