Codeforces#629 div.3(D。カルーセル)

オリジナルタイトルリンクします。https://codeforces.ml/contest/1328/problem/Dは、
シミュレーションのタイトルバーと見なさ
1時間以上のAが落ちません。ああ。10分、最後の治療を放棄しました。
この質問は、例の詳細をした以下のように、実行する感じですが、それは常に彼らも書き換えられ、何度も繰り返し、いくつかの部品が欠け以上のコードの変更を伴うとされた実現やって。
実際には、停止し、慎重にストロークを撫で、あまりにも性急な、程度の思考である必要があり
、まだあまりやるのすべての質問にすべての

我々は最初の塗装3色の最大値を知らなければならない
とき、すべてのグラフィックスが同じ色に塗られている場合にのみ、場合
アンジェラス色を塗装し、どの2つのグラフィックが奇数の総数として取り付けられていない場合だけ
、残りの場合火2色が可能

コード:

#include <bits/stdc++.h>
#define ll long long
using namespace std;

ll a[300005],d[300005];
ll book[300005];
int main()
{
    ll t,n,lpl=0;
    scanf("%lld",&t);
    while(t--)
    {
        lpl++;
        scanf("%lld",&n);
        for(int i=1;i<=n;i++)
        {scanf("%lld",&a[i]);}
        ll cnt=0;
        for(int i=1;i<=n;i++)
        {
            if(book[a[i]]!=lpl)
            {book[a[i]]=lpl;
            cnt++;}
        }
        if(cnt==1)
        {
            cout<<"1"<<endl;
            for(int i=1;i<=n;i++)
            {cout<<"1 ";}
            cout<<endl;continue;
        }
        if(cnt==2)
        {
            cout<<"2"<<endl;
            d[1]=1;cout<<d[1]<<" ";
            for(int i=2;i<=n;i++)
            {
                if(a[i]==a[i-1])
                {d[i]=d[i-1];}
                else
                {d[i]=d[i-1]==1?2:1;}
                cout<<d[i]<<" ";
            }
            cout<<endl;
            continue;
        }
        ll flag=0,posa,posb;
        for(int i=1;i<=n;i++)
        {
            if(i==1)
            {if(a[1]==a[n]){flag=2;break;}}
            if(a[i]==a[i-1])
            {flag=1;
            posa=i-1;posb=i;break;}
        }
        if(flag==0)
        {
            if(n%2==0)
            {
                cout<<"2"<<endl;
                for(int i=1;i<=n;i++)
                {
                    if(i%2!=0){cout<<"1 ";}
                    else{cout<<"2 ";}
                }
                cout<<endl;
            }
            else
            {
                cout<<"3"<<endl;
                for(int i=1;i<n;i++)
                {
                    if(i%2!=0){cout<<"1 ";}
                    else{cout<<"2 ";}
                }
                cout<<"3"<<endl;
            }
        }
        if(flag==2)
        {
            cout<<"2"<<endl;
            d[1]=1;cout<<d[1]<<" ";
            for(int i=2;i<=n;i++)
            {
                if(a[i]==a[i-1]){d[i]=d[i-1];}
                else{d[i]=d[i-1]==1?2:1;}
                cout<<d[i]<<" ";
            }
            cout<<endl;
        }
        if(flag==1)
        {
            cout<<"2"<<endl;
            d[1]=1;
            for(int i=2;i<=posa;i++)
            {
                if(a[i]==a[i-1]){d[i]=d[i-1];}
                else{d[i]=d[i-1]==1?2:1;}
            }
            d[n]=2;
            for(int i=n-1;i>=posb;i--)
            {
                if(a[i]==a[i+1]){d[i]=d[i+1];}
                else{d[i]=d[i+1]==1?2:1;}
            }
            for(int i=1;i<=n;i++)
            {cout<<d[i]<<" ";}
            cout<<endl;
        }
    }
    return 0;
}

公開された36元の記事 ウォンの賞賛4 ビュー1374

おすすめ

転載: blog.csdn.net/qq_43781431/article/details/105144868