2019-2020 ACM-ICPCブラジル準地域のプログラミングコンテスト

Aは、あなたがすべてのラウンドを経由せずに左上隅から右下隅に行くことができるかどうか尋ねる、あなたのラウンドを与えるために

古典ルーチンの問題、二つの円が交差する場合、ばらばらのセットの文ユニコムの使用を検討し、それらを聞かせては、合併円が交差境界と境界合併円の場合

最後に、境界線が相互に到着することができますかを決定

コード:

#include <ビット/ STDC ++ H>
名前空間STDを使用して、
const int型N = 10005;
constのダブルEPS = 1E-9;

整数N、M、K。
構造体ノード{
ダブルX、Y、R。
}オン];
INT F [N]。
INT _find(INT X){
IF(!F [X] = X)F [X] = _検索(F [X])。
リターンF [X]。
}
ボイド_merge(int型のx、int型のY){
X = _find(X)、Y = _find(Y)。
IF(X = Y!)F [X] = Y。
}

二重DIS(ノードA、ノードB){
戻りSQRT((AX-BX)(AX-BX)+(AY-によって)(AY-よります))。
}

BOOL smlepl(ダブルA、ダブルB){
IF(<B ||ファブ(AB)<EPS)リターン1。
0を返します。
}

ボイドガオは()は、{
ために(INTはI = 1; I <= K + 4; ++ I)
F [I] = I。
INT X0 = K + 1、Y0 = K + 2、XM = K + 3、YN = K + 4。
{(; I <= K ++ I INT iは= 1)のための
(int型J = 1; J <= K; ++ j)のための{
(I場合j)を継続します。
IF(smlepl(DIS(O [I]、[J] O)、O [I]・R + O [J] .R))
_merge(i、j)は、
}
IF(O [I] .yo [I]。R <= 0)_merge(I、Y0)。
IF(O [I] .Y + O [I]。R> = N)_merge(I、YN)。
IF(O [I] .xo [I]。R <= 0)_merge(I、X0)。
IF(O [I]・X + O [I]。R> = M)_merge(I、XM)。
}
IF(_find(Y0)
_find()|| _find(X0)_find(XM)||
_find(X0)
_find(Y0)|| _find(XM)== _検索(YN))
プット(「N」);
他のプット(「S」);
}

INTメイン(){
scanfの( "%D%D%D"、&M、およびN - 、&​​K)
のための(INT I = 1; I <= K; ++ I)
scanfの( "%LF%LF%LF"、 O&[I] .X、&O [I]・Y&O [I] .R);
ガオ();
戻り0;
}
B、記号、最初の数を決定するには、最大ではありません

コード:

#include <ビット/ STDC ++ H>
名前空間STDを使用して、
CONST INT N = 1E4 + 5。

整数nは、[N]。

INTメイン(){
scanfの( "%のD"、およびN-);
のための(INT I = 1; I <= N; ++ I)
scanfの( "%のD"、&A [I]);
int型MX = -0x3f3f3f3f。
POS = -1 INT;
のための(INT I = 1; I <= N; I ++){
IF(A [I]> MX){
MX = A [I]、
POS = I;
}
}
(POS = IF 1 =)プット(「S」);
他プット(「N」);
戻り0;
}
D、ツリー与え、あなたは葉パスにk個の葉マークをルートからすべてのノードを選択する必要が
Q少数のノードにマークアップされています

長鎖分割、木のルーチンとスプリットのリンクを考えてみましょう、以下を参照してください。パーティションツリーチェーン

最長のk個のチェーンに選出

コード:

#include <ビット/ STDC ++ H>
名前空間STDを使用して、
CONST INT N = 1E5 + 5。

整数N、K。
[N]、息子[N]、トップlenのINT F [N]、DEP [N]、[N]。
ベクトルe [N]。
ベクトルTMP;

空隙D1(int型X){
lenの[X] = 1。
(自動車及びE [X]){ため
DEP [Y] = DEP [X] +1。
D1(Y)。
LEN [X] =最大(LEN [X]、lenの[Y] +1)。
(彼らがlen [そして]> LEN [いる[X]])場合であり、[X] = Y。
}
}

空隙D2(int型のx、int型T){
トップ[X] = T。
IF(E [X] .size()== 0){
tmp.push_back(DEP [X] -dep [TOP [X]] + 1)。
リターン;
}
IF(息子[X])D2(息子[X]、T);
(自動Y:E [X])のための{
IF(Y =息子[X]!)D2(Y、Y)。
}
}

ボイドガオ(){
int型のリーフ= 0。
(++ I; I <= N INT iは= 1)のための
(E [I] .size()== 0)葉++場合。
もし(K> =葉){
のprintf( "%d個"、N)
リターン;
}
DEP [1] = 1。
D1(1)。
D2(1,1)。
ソート(tmp.begin()、tmp.end()、より大きい());
int型ANS = 0;
以下のために(INT I 0 =; I <K; ++ I)ANS + = TMP [I]。
printf( "%dの"、ANS)。
}

int型のmain(){
scanfの( "%のDの%のD"、およびN-、&K);
F = 0 [1];
(; I <= N ++ I INT I = 2)のための
scanfの( "%のD"、&F [I])、E [F [I]一back(I);.
ガオ();
戻り0;
}
/ *
9 2
。1 1 3 2 5 6 7 7
* /
Hは、個体はあらゆる所与、走行中に存在します数周数記号の後、彼は常に離れなり、彼はいくつかの兆候を通じて、10%、20%... 90%の散歩で完了するように要求されます

覚えて直接オペレータが切り上げられます

コード:

#include <ビット/ STDC ++ H>
名前空間STDを使用して、

int型V、N。

int型のmain(){
scanfの( "%D%D"、&V、およびN-);
のための(INT I = 1; I <= 9; I ++){
のprintf( "%のD"、((V N- 9)I) / 10);
}
の戻り0;
}
L、質問の多くの奇妙な意味は、二人は様々な状況に対応し、n回を投げ、フェアプレーを確実にコインを入れるためには、アンバランスなコインで、コインを果たしていることを言いました異なる人々の勝利
まで割り当てることができますどのように多くの場合、ケースを勝利の等しい確率の両方を確保するために、すべての状況に二人を割り当てるように頼みます

どちらの場合も、1と0の同数明らかに、次に起こることは両方のケースを獲得する確率に等しい出現の同じ確率を考えてみましょう

法律を見つけるためにテーブルを果たし、ルールは、2番目(nは2進数の1の数を示す)ことが見出されています

それが唯一のint型の数を計算することができますので、ここでは、死んだ__builtin_popcount()ピットだった1

コード:

#include <ビット/ STDC ++ H>
名前空間STDを使用して、
長い長いLLのtypedef。

LLのn;

INTガオ(LL N){
int型ANS = 0。
一方、(N){
IF(N&1)ANS ++。
N / A = 2。
}
ANSを返します。
}

メインINT(){
CIN >> N、
COUT <<(ガオ1LL <<(N));
戻り0;
}
時のM、C、およびN個々のタスクは、各タスクが連続期間に割り当てられる、一つのユニットTタスクを完了するために最短時間を尋ねる、タスクを完了することができますがはるかにあります

それ以外の場合は次の人に割り当てられていることができます半分の時間、完全に可能な限り完了するためのタスクの貪欲な割り当ては、最終的な数を確認する必要性が少ないcよりです

コード:

#include <ビット/ STDC ++ H>
名前空間STDを使用して、
CONST INT N = 1E5 + 5。
長い長いLLのtypedef。

INT、N、C、T。
[N]をint型。

ブールCHK(LL今){
int型CNT = 0、和= 0。
以下のために(INT I 1 =; I <= N; ++ i)が{
場合([I]>今t)が0を返します。
IF(和+ [I] <=今
T)
の和+ = [I]。
他の{
CNT ++;
和は= [I]。
}
}
もし(合計= 0!)CNT ++;
リターンCNT <= C;
}

LL半分(LLのL、LL R){
一方(L <= R){
LL M =(L + R)/ 2。
(CHK(M))であれば、R = M-1。
他L = M + 1です。
}
Lを返します。
}

INTメイン(){
scanf関数( "%D%D%D"、&N、&C&T)。
以下のために(INT I 1 =; I <= N; ++ I)
のscanf( "%dの"、および[I])。
LL ANS =半分(1,1e10)。
printf( "%のLLD"、ANS)。
0を返します。
}

公開された545元の記事 ウォンの賞賛129 ・は 40000 +を見て

おすすめ

転載: blog.csdn.net/weixin_43838785/article/details/104233818