4 条题解

  • 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;
    }
    
    • 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
        标签
        递交数
        130
        已通过
        96
        上传者