社区讨论
90 分玄关求助 qwq
P15267「UTOI 1B」Chaotic Time Trio参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mlhyppnm
- 此快照首次捕获于
- 2026/02/11 19:44 上周
- 此快照最后确认于
- 2026/02/11 19:46 上周
rt,substack 3 WA 了,返回我某次操作的时候没有元素 1 却输出了 1,求助。
CPP#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define FOR(i,a,b) for(int i=(a),E##i=(b);i<=E##i;i++)
#define REV(i,a,b) for(int i=(a),E##i=(b);i>=E##i;i--)
#define CLOSE_TIE ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define psbk push_back
#define endl '\n'
template <typename T>
void _outval(string s,int p,const T &t) {cout<<s.substr(p,s.length()-p)<<'='<<t<<endl; }
template <typename T, typename... Args>
void _outval(string s,int p,const T &t,const Args &...rest){
string n=""; while(s[p]!=',') n+=s[p++]; cout<<n<<'='<<t<<", ";
_outval(s,p+1,rest...);
}
#define outval(...) _outval(#__VA_ARGS__,0,__VA_ARGS__)
#define outarr(a,be,ed)\
{cout<<(#a)<<": ";\
FOR(iiii,be,ed)cout<<'['<<iiii<<"]="<<a[iiii]<<", "; cout<<endl;}
const int N=2e5+5;
int T,n;
int to1(int be,int cnt0){//be+0 -> 1
int val=be;
FOR(i,1,cnt0){
cout<<val<<" 0\n";
val=(val==1?2:1);
}
return val;
}
void to0(int cnt0){//0 -> 0,cnt0>=4
int val=to1(0,cnt0-3);
puts("0 0");
cout<<val<<" 1\n";
}
void solve(){
#define noSol return puts("-1"),void();
int cnt0=0,cnt1=0;
vector<int> a;
cin>>n;
FOR(i,1,n){
int x; cin>>x;
if(!x) ++cnt0;
else a.psbk(x),++cnt1;
}
if(n==cnt0&&n==1) return;
if((n==2&&cnt0) || (n==cnt0&&n<4) || (n==1&&!cnt0) ) noSol;
if(n==cnt0) return to0(cnt0),void();
if(cnt1&1){//使用 0 使得加上一个 1,尽可能改变奇偶性
if(!cnt0){
if(cnt1==3) noSol;
for(int i=0;i<cnt1-2;i+=2) cout<<a[i]<<' '<<a[i+1]<<endl;
a[0]=to1(0,(cnt1-1)/2-1),a[1]=a[cnt1-1];
cnt1=2;
}else if(cnt0==1){
for(int i=0;i<cnt1-2;i+=2) cout<<a[i]<<' '<<a[i+1]<<endl;
a[0]=to1(0,(cnt1-1)/2),a[1]=a[cnt1-1];
cnt1=2;
}
++cnt1; a.psbk(to1(0,cnt0-1));
//puts("qaq");
}else{//尽可能不改变奇偶性
a[0]=to1(a[0],cnt0);
//puts("qwq");
}
int pos=0;
FOR(i,1,(cnt1>>1)-1){
cout<<a[pos]<<' '<<a[pos+1]<<endl;
cout<<"0 "<<a[pos+2]<<endl;
a[pos+1]=0; a[pos+=2]=1;
}
cout<<a[pos]<<' '<<a[pos+1]<<endl;
}
int main(){
cin>>T;
while(T--) solve();
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...