神秘做法求hack\证明复杂度
查看原帖
神秘做法求hack\证明复杂度
895690
gghack_Nythix楼主2024/8/27 10:41

思路就是排除不可能的 p1p_1 然后暴力检查。

#include<bits/stdc++.h>
using namespace std;
int b[2000005],n,rud;
int p[2000005],sm[2000005],mp[2000005];

inline bool creatone(int st) {
	int xs = st;
	for(int i = 1;i < n;++i) {
		if((xs ^ b[i]) == st || (xs ^ b[i]) < 1 || (xs ^ b[i]) > n) return 0;
		xs ^= b[i]; 
	}
	xs = st;
	for(int i = 1;i <= n;++i) cout << xs << " ",xs ^= b[i];
	cout << '\n';
	return 1;
}
void solve() {
	cin >> n;
	++rud;
	for(int i = 1;i < n;++i) cin >> b[i],sm[i] = sm[i - 1] ^ b[i],mp[sm[i]] = rud;
	for(int p1 = 1;p1 <= n;++p1) {
		if(p1 != b[1] && mp[p1] != rud) if(creatone(p1)) break; 
	}
	return void();
}
signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int T;
	cin >> T;
	while(T-->0)solve();
	return 0;
}
2024/8/27 10:41
加载中...