其他分享
首页 > 其他分享> > ARC103E题解

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