社区讨论

神秘做法求hack\证明复杂度

P11008『STA - R7』异或生成序列参与者 4已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@m0bto24f
此快照首次捕获于
2024/08/27 10:42
2 年前
此快照最后确认于
2025/11/04 22:19
4 个月前
查看原帖
思路就是排除不可能的 p1p_1 然后暴力检查。
CPP
#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;
}

回复

5 条回复,欢迎继续交流。

正在加载回复...