wwbt3
Posted znsbc-13
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wwbt3相关的知识,希望对你有一定的参考价值。
#include<bits/stdc++.h> using namespace std; #define ll int #define A 3000000 ll n,K,pf[A],a[A],last[A],pos[A],colo[A]; bool arkn[A]; vector<ll> son[350000]; bool color(ll x,ll r,ll l,ll col,ll pre) colo[x]=col; for(ll i=0;i<son[x].size();i++) ll y=son[x][i]; if(y>r||y<l||y==pre) continue; if(!colo[y]) colo[y]=colo[x]^1; if(!color(y,r,l,3-col,x)) return 0; if(colo[y]==colo[x]) return 0; return 1; ll main() scanf("%d%d",&n,&K); for(ll i=1;i<=512;i++) pf[i]=i*i,arkn[i*i]=1; for(ll i=1;i<=n;i++) scanf("%d",&a[i]); if(K==1) ll ans=1,p=n; for(ll i=n;i>=1;i--) for(ll j=512;j>=1;j--) if(pf[j]<=a[i]) break; if(last[pf[j]-a[i]]) for(ll k=p;k>i;k--) last[a[k]]=0; pos[ans]=i,p=i,ans++; break; last[a[i]]++; printf("%d\n",ans); for(ll i=ans-1;i>0;i--) printf("%d ",pos[i]); puts(""); return 0; else ll ans=1,p=n; for(ll i=1;i<=512;i++) arkn[i*i]=1; for(ll i=n;i>=1;i--) for(ll j=p;j>i;j--) if(arkn[a[i]+a[j]]) son[i].push_back(j); son[j].push_back(i); if(!color(i,p,i,1,0)) pos[ans]=i,p=i,ans++; son[i].clear(); for(ll j=p;j>=i;j--) colo[j]=0; printf("%d\n",ans); for(ll i=ans-1;i>0;i--) printf("%d ",pos[i]); puts(""); return 0;
以上是关于wwbt3的主要内容,如果未能解决你的问题,请参考以下文章