ABC171の問題EでXORの計算がわからない
ABC171_Eで以下のように考えました。
サンプル1の場合)
N=4
(^はXOR)
x2^x3^x4=20 …①
x1^x3^x4=11 …②
x1^x2^x4=9 …③
x1^x2^x3=24 …④
①^②を考えると
x1^x2=20^11=32
他も同様にすると
x1^x2=31 …⑤
x2^x3=2 …⑥
x3^x4=17 …⑦
x4^x1=24 …⑧
この式をもとに
x1を1から1000000000まで増やしていき、x1が決まればx2が決まりx2が決まればx3が決まるのでこれを繰り返し、⑤⑧までを満たすx1x4を探すという方法を考えました。
ソースコード
#include<bits/stdc++.h> using namespace std; int main(){ int N; cin >> N; vector<int> a(N); for(int i=0;i<N;i++) cin >> a[i]; vector<int> x(N); int num1,num2; vector<int> XOR_num(N); for(int i=0;i<N;i++){ if(i==N-1){ num1=a[0]; num2=a[N-1]; }else{ num1=a[i]; num2=a[i+1]; } XOR_num[i]=num1^num2; } for(int num=1;num<=1000000000;num++){ //x[0]がnumのとき x[0]=num; for(int i=0;i<=N-2;i++){ x[i+1]=x[i]^XOR_num[i]; } if((x[0]^x[N-1])==XOR_num[N-1]){ break; } } for(int i=0;i<N;i++){ cout << x[i] << endl; } }
発生している問題
サンプルの入力が以下です。
4
20 11 9 24
これを実行すると
x1=1
x2=30
x3=28
x4=13
になりました。
これは①〜④までの式は満たしませんでした。
###試したこと
サンプルのx1の解を固定して実行したところx2~x4も正しく出力されました。
###わからないこと
式⑤⑧で求めた解が式①④を満たさなくなってしまうのはなぜなのでしょうか?
回答3件
あなたの回答
tips
プレビュー