ポータル:https://codeforces.com/contest/1236/problem/D
ギャングするコードの実装:https://blog.csdn.net/weixin_39132605/article/details/102868652
1の#include <ビット/ STDC ++ H> 2 の#define長い長llの 3 使用して 名前空間STDを、 4 CONST INT MAXN = 1E5 + 5 。 5 6 セット < INT > S1 [MAXN]、S2 [MAXN]。 7 INT メイン() 8 { 9 整数N、M、K。 10 のscanf(" %D%D%D "、&N、&M、およびK); 11 のために(INT iは= 1 ; I <= K; I ++ ){ 12 のint X、Y。 13 のscanf(" %D%D "、およびX&Y)。 14の S1 [X] .insert(Y)、S2 [Y] .insert(X)。 15 } 16 のために(INT iが= 1 ; iが<= N; I ++ ){ 17 、S1 [i]が.insert(0); S1 [i]は.insert(M + 1 )。 18 } 19 のために(INT iは= 1 ; iが<= M; I ++ ){ 20 S2 [i]が.insert(0); S2 [i]を.insert(nは+ 1 )。 21 } 22 INT nowx =1、新しい= 1 ; 23の II ANS = 1 。 24 INT NX = 1、NY = 1 。 25 INT MAXX = N = MAXY M、ミンクス= 1、鉱山= 1 。 26 のために(INTは iは= 0 ;; I ++ ) 27 { 28 であれば(私%4 == 0 ){ 29 NX = nowx。 30台の int型の POS = * S1 [nowx] .lower_bound(新しいです)。 31、 NY =分(MAXY、POS- 1); 32 ミンクス= NX + 1 。 33 } 34 そう なら(I%4 == 1 ){ 35 ニューヨーク= 新しいです; 36台の int型の POS = * S2 [新規] .lower_bound(nowx)。 37 NX =分(MAXX、POS- 1 )。 38 MAXY = NY- 1 。 39 } 40 そう なら(I%4 == 2 ){ 41 NX = nowx。 42 自動T =S1 [nowx] .lower_bound(ノヴィ)。 43 it-- 。 44 INT POSY = * それ。 45 ニューヨーク= MAX(MINY、POSY + 1 )。 46 MAXX = nowx- 1 。 47 } 48 そう なら(I%4 == 3 ){ 49 NY = ノヴィ。 50 自動それ= S2 [ノヴィ] .lower_bound(nowx)。 51 it-- 。 52 INT POSX = * それ。 53 NX = MAX(ミンクス、POSX + 1); 54 面新しい= + 1 ; 55 } 56 ANS + = ABS(NX-nowx)+ ABS(NY- 新しいです)。 57 であれば(nowx == ==新しい&& NX 、NY){ 58 であれば(nowx == 1 &&新しい== 1 &&%及び4 == 0 ){} 59 他 { ブレーク;} 60 } 61 nowx = NX、新しい= NY。 62 } 63 であれば(ANS ==(II)のn * m個のK){ 64 COUT << " YES "<< てendl; 65 } 66 他{ 67 COUT << " NO " << ENDL。 68 } 69 リターン 0 。 70 }