結果
| 問題 | No.1209 XOR Into You | 
| コンテスト | |
| ユーザー |  carrot46 | 
| 提出日時 | 2020-08-31 15:17:00 | 
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) | 
| 結果 | 
                                WA
                                 
                             | 
| 実行時間 | - | 
| コード長 | 1,830 bytes | 
| コンパイル時間 | 2,011 ms | 
| コンパイル使用メモリ | 187,864 KB | 
| 実行使用メモリ | 21,100 KB | 
| 最終ジャッジ日時 | 2024-11-16 00:10:15 | 
| 合計ジャッジ時間 | 8,827 ms | 
| ジャッジサーバーID (参考情報) | judge2 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 4 | 
| other | AC * 36 WA * 1 | 
ソースコード
#include <bits/stdc++.h>
//#include <chrono>
#pragma GCC optimize("Ofast")
using namespace std;
#define reps(i,s,n) for(int i = s; i < n; i++)
#define rep(i,n) reps(i,0,n)
#define Rreps(i,n,e) for(int i = n - 1; i >= e; --i)
#define Rrep(i,n) Rreps(i,n,0)
#define ALL(a) a.begin(), a.end()
#define fi first
#define se second
typedef long long ll;
typedef vector<ll> vec;
typedef vector<vec> mat;
ll N,M,H,W,Q,K,A,B;
string S;
typedef pair<ll, ll> P;
const ll INF = (1LL<<60);
int main() {
    cin>>N;
    vec a(N), b(N);
    rep(i,N) cin>>a[i];
    rep(i,N) cin>>b[i];
    rep(i, N - 1) a[i] = a[i] ^ a[i + 1];
    rep(i, N - 1) b[i] = b[i] ^ b[i + 1];
    a.resize(N - 1); b.resize(N - 1);
    --N;
    vec copy_a(a), copy_b(b);
    sort(ALL(copy_a)); sort(ALL(copy_b));
    if(copy_a != copy_b){
        cout<<-1<<endl;
    }else{
        class BIT{
                ll n;
          		vector<ll> bitree;
            public:
            	BIT(unsigned long _n) : bitree(_n + 1, 0){
                  n = _n;
                }
            	void add(ll id, ll x){
                  while(id <= n){
                    bitree[id] += x;
                    id += id & -id;
                  }
                  return;
                }
            	ll sum(ll id){
                  ll temp = 0;
                  while(id > 0){
                    temp += bitree[id];
                    id -= id & -id;
                  }
                  return temp;
                }
          };
        unordered_map<ll, vector<int> > b_id;
        unordered_map<ll, int> id_id;
        BIT bit(N + 5);
        ll res(0);
        rep(i,N) b_id[b[i]].push_back(i + 1);
        rep(i,N) {
            int id = b_id[a[i]][id_id[a[i]]++];
            res += i - bit.sum(id);
            bit.add(id, 1);
        }
        cout<<res<<endl;
    }
}
            
            
            
        