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;
    
View Code

 

以上是关于wwbt3的主要内容,如果未能解决你的问题,请参考以下文章