社区讨论

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 条回复,欢迎继续交流。

正在加载回复...