ARC103E题解
作者:互联网
思路很奇怪(?)
考虑是否合法的条件。注意到这个显然要求对称(即存在 \(i\) 必须存在 \(n-i\)),如果不满足一定无解。
然后比较显然的是 \(1\) 不存在和存在 \(n\) 都无解。
然后注意到应该要满足一个 \(F=x\sum F^k\) 之类的 \(0/1\) 卷积。
然后发现,如果存在 \(1\) 那这个是不是一定能被构造出来啊?
只要让下一个存在的 siz 挂着上一个存在的 siz 和一车叶子就好了啊。
随便写写,\(O(n)\) 的。
#include<cstring>
#include<cstdio>
const int M=1e5+5;
int n,tot;char s[M];bool vis[M];
signed main(){
scanf("%s",s+1);n=strlen(s+1);for(int i=1;i<=n;++i)vis[i]=s[i]=='1';if(n==1)return 0;
for(int i=1;i<=n;++i)if(vis[i]^vis[n-i])return printf("-1"),0;
if(vis[n]||!vis[1]||!vis[n-1])return printf("-1"),0;
for(int lst(1),i=2;i<=n+1;++i)if(vis[i]){
for(int k=lst;k<i;++k)printf("%d %d\n",i,k);lst=i;
}
else if(i==n+1)for(int k=lst;k<n;++k)printf("%d %d\n",n,k);
}
标签:存在,int,题解,然后,siz,include,ARC103E 来源: https://www.cnblogs.com/lmpp/p/16621367.html