题解:P17867 [FJCPC 2026] 哦 搞错了
Cherry_Pop · · 题解
思路
不难注意到对于两个数
设
考虑极限情况,所以令
如果要使所有
如果
有了
代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int rd(){
int x=0;bool f=0;char ch=getchar();
while(ch>'9'||ch<'0'){
if(ch=='-')f=1;
ch=getchar();
}do{x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}while(ch>='0'&&ch<='9');
return f?-x:x;
}
int n,s=1,x=1,y;
char c[100001],b[100001];
signed main(){
scanf("%s",c+1),n=strlen(c+1);
for(int i=1;i<=n;i++)b[i]=c[i],s^=(c[i]=='1');
if(s)b[1]='1'-b[1]+'0';
for(int i=1;i<=n;i++){
if(b[i]-'0')printf("%lld ",(1ll<<59)+y++);
else printf("%lld ",x++);
}
return 0;
}