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; }
,