教育Codeforcesラウンド79 A.新年ガーランド

https://codeforces.com/contest/1279/problem/A

思考:我々はRの最大数は、それがRで囲まれているため、R> = G> = Bをとることができる唯一のGまたはRとBの隣接する二つの間のB又はGであってもよいです

           B R R + 1は、空隙を有し、それらはB放電の全てを完了することができなければならないため、次の戦略の構成によれば、第1のRは、隣接する2つの放電の間に、次にRの全てを入れ、隣り合うあってもよいです第1表面又はR R又はRとの間の最後の後に空であります

                                     それは二つの隣接するRの間の空の位置を埋めることができない場合は次のG最初の位置は、明らかに、二つの隣接するRの間に空を埋めるために、あなたが質問の意味と一致配列を構築することはできません

                                     残りのGが存在する場合、実際にはそれぞれ1つのGの両側に置く(第一の前面と最後R R、Gの後の最初し、各Bの左側または右側に入れBは、また、問題の意味と一致していますG(B)を別々に考慮した場合、しかし一般的な仮説R> = G> = B、2つの隣接するR

                                     G(B)、G(B)にできなければならないとの間に配置された)実行され

要約すると、限りG + B> = R-1できればG最初の前またはRの隣接する二つの間の最後のRまたはRの後に配置+ B = R-1、R、R + 1、 AとG又はB

        G + B> R + 1、BはG> 0 G-(R + 1-B)= G + BR-1を左にR + 1-Bは、単一の位置Gを置くことができ、残りの採血され、これは一緒にBと、Bは、位置Bを有するB-(G + BR-1)= R + 1-G> = 1、すなわちそれぞれ、G放電の残りを完了することができます左右間の唯一のB-B解除Gの後、二つの隣接するRが存在します

公式:

 

 

#
 #include<bits/stdc++.h>
#define ll long long
using namespace std;
 
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int T;
    cin>>T;
    while(T--){
        int m1=0,m2=0,m3=0,a,b,c;
        cin>>a>>b>>c;
        ll sum=a+b+c;
        if(a>b){
            if(a>c){m1=a;if(b>c)m2=b,m3=c;else m2=c,m3=b;
            }
            else{m1=c;if(b>a)m2=b,m3=a;else m2=a,m3=b;
            }
        }
        else{
            if(b>c){m1=b;if(a>c)m2=a,m3=c;else m2=c,m3=a;
            }
            else{m1=c;if(b>a)m2=b,m3=a;else m2=a,m3=b;
            }
        }
        if(m2+m3>=m1-1)
        cout<<"Yes"<<endl;//if(sum-m1>=m1-1&&m2-m1<m3)
        else cout<<"No"<<endl;
    }
    
    
    return 0;
}

 

おすすめ

転載: www.cnblogs.com/wyh447154317/p/12165901.html