社区讨论
求 hack
P15267「UTOI 1B」Chaotic Time Trio参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mlhvnya2
- 此快照首次捕获于
- 2026/02/11 18:19 4 周前
- 此快照最后确认于
- 2026/02/13 15:50 3 周前
CPP
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 2e5 + 5;
int t, n, a[N], sum0, sum1;
vector<int> s, v;
vector<pair<int, int>> ans;
bool flag = 0;
bool vis[10];
bool A(int op){
if(sum0 >= 2 && op == 1){
sum0 -= 2;
ans.push_back({0, 0});
sum1++;
return 1;
}
if(sum0 >= 1 && sum1 >= 1 && op == 2){
sum0--, sum1--;
ans.push_back({0, 1});
s.push_back(2);
return 1;
}
if(sum1 >= 2 && op == 3){
sum1 -= 2;
ans.push_back({1, 1});
sum0++;
return 1;
}
if(sum0 >= 1 && s.size() && op == 4){
sum0--;
ans.push_back({0, s.back()});
sum1++;
s.pop_back();
return 1;
}
if(sum1 >= 1 && s.size() && op == 5){
sum1--;
ans.push_back({1, s.back()});
sum0++;
s.pop_back();
return 1;
}
if(s.size() >= 2 && op == 6){
ans.push_back({s.back(), s[s.size() - 2]});
sum0++;
s.pop_back(), s.pop_back();
return 1;
}
return 0;
}
void dfs(int u){
if(flag) return ;
if(u == 7){
sum0 = sum1 = 0;
s.clear(), ans.clear();
for(int i = 1; i <= n; i++){
if(a[i] == 0) sum0++;
else if(a[i] == 1) sum1++;
else s.push_back(a[i]);
}
for(int i = 1; i < n; i++){
bool f = 0;
for(int j = 0; j < v.size(); j++){
if(A(v[j])){
f = 1;
break;
}
}
if(!f) break;
}
if(sum0 != 1 || sum1 || s.size()){
return ;
}
for(pair<int, int> p : ans) cout << p.first << ' ' << p.second << '\n';
flag = 1;
return ;
}
for(int i = 1; i <= 6; i++){
if(!vis[i]){
v.push_back(i), vis[i] = 1;
dfs(u + 1);
v.pop_back(), vis[i] = 0;
}
}
}
void solve(){
cin >> n;
int f = 0;
for(int i = 1; i <= n; i++) cin >> a[i], f |= (a[i] != 0);
if(!f){
if(n == 1){
return ;
}
if(n < 4){
cout << "-1\n";
return ;
}
cout << "0 0\n";
int pre = a[1];
for(int i = 2; i <= n - 2; i++){
cout << pre << ' ' << a[i] << '\n';
pre = (pre == 0 ? 1 : (pre == 1 ? 2 : 1));
}
cout << pre << ' ' << 1 << '\n';
return ;
}
flag = 0, dfs(1);
if(!flag) cout << "-1\n";
}
int main(){
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> t;
while(t--) solve();
return 0;
}
上述代码在赛时过了,本人不太清楚他的先后顺序,就想了这个投机取巧的办法。但奇怪的是当把特殊性质 A 的判断删掉后性质 A 的第二个点会错,只有 90 分。
本人想询问一下问题所在,解决必关。
⎛⎝≥⏝⏝≤⎛⎝
注意:(不要讲些什么这肯定错了的话语,带点依据可以吗……)。
回复
共 1 条回复,欢迎继续交流。
正在加载回复...