提出 #27271477


ソースコード 拡げる

#include <bits/stdc++.h>

using namespace std;

# define Rep(i,a,b) for(int i=a;i<=b;i++)
# define _Rep(i,a,b) for(int i=a;i>=b;i--)
# define RepG(i,u) for(int i=head[u];~i;i=e[i].next)

typedef long long ll;
typedef double db;

# define chkmax(a,b) a=max(a,b)
# define chkmin(a,b) a=min(a,b)
# define PII pair<int,int>
# define mkp make_pair

const int N=2.5e5+5;
const int M=19;

template<typename T> void read(T &x){
    x=0;int f=1;
    char c=getchar();
    for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
    for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+c-'0';
    x*=f;
}

int n;
int a[N],b[N];
int trie[1<<M][2],tot;
int fx[1<<M][2][M][2],fy[1<<M][2][M][2];
int g[1<<M][2];
int siz[1<<M][2];
ll ans;

ll query(int x,int y){
    ll res=0;
    int u=0;
    _Rep(i,17,0){
        int cx=x>>i&1,cy=y>>i&1;
        int go=trie[u][cx^cy^1];
        if(go)
            _Rep(j,i,0){
                res+=1ll*fx[go][cx][j][x>>j&1^1]<<j;
                res+=1ll*fy[go][cy][j][y>>j&1^1]<<j;
            }
        if(!trie[u][cx^cy])break;
        u=trie[u][cx^cy];
        res+=1ll*g[u][cx^1]<<i;
    }
    return res;
}

void insert(int x,int y){
    int u=0;
    _Rep(i,17,0){
        int cx=x>>i&1,cy=y>>i&1;
        if(!trie[u][cx^cy])trie[u][cx^cy]=++tot;
        u=trie[u][cx^cy];
        g[u][cx]++;
        _Rep(j,i,0){
            fx[u][cx][j][x>>j&1]++;
            fy[u][cy][j][y>>j&1]++;
        }
    }
}

int main()
{
    # ifdef YuukiYumesaki
    freopen("testdata.in","r",stdin);
    freopen("test1.out","w",stdout);
    # endif
    read(n);
    Rep(i,1,n)read(a[i]);
    Rep(i,1,n)read(b[i]);
    Rep(i,1,n){
        ans+=query(a[i],b[i]);
        insert(a[i],b[i]);
    }   
    printf("%lld\n",ans);
    return 0;
}

提出情報

提出日時
問題 D - Sum of Min of Xor
ユーザ devout
言語 C++ (GCC 9.2.1)
得点 700
コード長 1810 Byte
結果 AC
実行時間 768 ms
メモリ 250800 KiB

コンパイルエラー

./Main.cpp: In function ‘ll query(int, int)’:
./Main.cpp:44:44: warning: suggest parentheses around arithmetic in operand of ‘^’ [-Wparentheses]
   44 |                 res+=1ll*fx[go][cx][j][x>>j&1^1]<<j;
      |                                        ~~~~^~
./Main.cpp:45:44: warning: suggest parentheses around arithmetic in operand of ‘^’ [-Wparentheses]
   45 |                 res+=1ll*fy[go][cy][j][y>>j&1^1]<<j;
      |                                        ~~~~^~

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 700 / 700
結果
AC × 3
AC × 20
セット名 テストケース
Sample 00-sample-001.txt, 00-sample-002.txt, 00-sample-003.txt
All 00-sample-001.txt, 00-sample-002.txt, 00-sample-003.txt, 01-001.txt, 01-002.txt, 01-003.txt, 01-004.txt, 01-005.txt, 01-006.txt, 01-007.txt, 01-008.txt, 01-009.txt, 01-010.txt, 01-011.txt, 01-012.txt, 01-013.txt, 01-014.txt, 01-015.txt, 01-016.txt, 01-017.txt
ケース名 結果 実行時間 メモリ
00-sample-001.txt AC 5 ms 3460 KiB
00-sample-002.txt AC 2 ms 3556 KiB
00-sample-003.txt AC 4 ms 3640 KiB
01-001.txt AC 2 ms 3508 KiB
01-002.txt AC 3 ms 4028 KiB
01-003.txt AC 2 ms 4708 KiB
01-004.txt AC 13 ms 7760 KiB
01-005.txt AC 10 ms 9260 KiB
01-006.txt AC 6 ms 3508 KiB
01-007.txt AC 4 ms 3628 KiB
01-008.txt AC 700 ms 241104 KiB
01-009.txt AC 337 ms 172128 KiB
01-010.txt AC 616 ms 229784 KiB
01-011.txt AC 552 ms 220848 KiB
01-012.txt AC 751 ms 250584 KiB
01-013.txt AC 768 ms 250800 KiB
01-014.txt AC 752 ms 250544 KiB
01-015.txt AC 757 ms 250636 KiB
01-016.txt AC 135 ms 5488 KiB
01-017.txt AC 137 ms 5560 KiB