問題の意味:ゲームをプレイAとB、n番目の車輪の合計、Bに対するAは、i番目の第2ラウンドは、[i]とB [i]はスコア、スコアを与えることができたし、現在に蓄積します
選択の各ラウンドは、分マイナス2の両方であるスコアを相殺するために行うことができた後に
いくつかの点のスコアで誰かが、その後、以下K以上失う場合
最小オフセットは、勝つために何回か尋ねました
N <= 2E5、K <= 1E9
アイデア:2つのスコアと同じとの間の差の、状況の開始位置から最終位置ずれを考慮しているため、固定されています
DP [i]を示し、I Aは無敗最小周波数オフセットであります
これは、右、右、左ポイントと右に単調dpと、ポイントを持っていることです、一度リニアスイープを出てきました
1の#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 typedefの長い 長いLL。 4 typedefの符号なし整数 UINT 。 5符号なしのtypedef 長い 長いULL。 6 typedefの長い ダブルLD; 7のtypedef対< INT、INT > PII。 8対のtypedef <-1,11,11-> PLL。 9のtypedefベクトル< INT > VI。 10のtypedefベクトル<PII> VII。 11のtypedef対<-1,11,11-> P。 12 の#define N 500010 13 の#define M 1000000 14 の#define INF 1E9 15 の#define Fiの最初の 16 の#define SE第 17 の#define MP make_pair 18 の#define PB一back 19 の#define PI ACOS(-1) 20 の#define MEM(A 、B)のmemset(A、B、はsizeof()) 21 の#define担当者(I、B)のための(INT iは=(INT); I <=(INT)B; I ++) 22 の#define(あたりI、A、B)のための(INT I =(INT); I> =(INT)B; i--) 23 の#definelowbit(x)は、x&( - X) 24 の#defineランド(RAND()*(1 << 16)+ランド()) 25 の#define ID(X)((X)<= B(X):MN /? (x)は1) 26件 の#defineのls P << 1つの 27 の#define | RS用のp << 1つの1つの 28 の#define!E [X])の場合(I = P):(オートiに対するFORS(I) 29 30 CONST INT MOD = 1E9 + 7、INV2 =(MOD + 1)/ 2 。 31 二重 EPS = 1E- 6 。 32 int型 DX [ 4 ] = { - 1、1、0、0 }。 33 のint DY [ 4 ] = { 0、0、 - 1、1 }。 34 35 LL S [N] [ 2 ]、[N]、B [N]。 36 int型DP [N]、[N]を事前。 37 38 39 int型リード() 40 { 41 のint = V 0、F = 1 。 42 チャー C = GETCHAR()。 43 一方、(C < 48 || 57 <C){ もし、(C == ' - ')= F -1 ; C = GETCHAR();} 44 ながら(48 <= C && C <= 57)V =(V << 3)+ V + V + C- 48、C = GETCHAR()。 45 リターン V * F; 46 } 47 48 LL readll() 49 { 50 = 11のV 0、F = 1 。 51 チャー C = GETCHAR()。 52 一方、(C < 48 || 57 <C){ もし、(C == ' - ')、F = - 1。C =GETCHAR();} 53 ながら(48 <= C && C <= 57)V =(V << 3)+ V + V + C- 48、C = GETCHAR()。 54 リターン V * F; 55 } 56 57 LL CALC(int型のx、int型の Y、int型のOP) 58 { 59 リターン S [Y] [OP] -min(S [X] [ 0 ]、S [X] [ 1 ])。 60 } 61 62 のint main()の 63 { 64件 のint CAS = (読み取り) 65 一方(cas-- ) 66 { 67 INT N = (読み取り) 68 LLのK = readll()。 69の S [ 0 ] [ 0 ] = S [ 0 ] [ 1 ] = 0 ; 70 担当者(I、1、N)[I] = readll()、S [i]が[ 0 ] = S [I- 1 ] [ 0 ] + [I]。 71 担当者(I、1、n)がB [I] = readll()、S [i]を[ 1 ] = S [I- 1 ] [ 1 ] + B [i]は、 72 DP [ 0 ] = 0 ; 73 担当者(I、1、N)DP [I] = INF。 74 int型 J = 0 ; 75 担当者(I、1 、N) 76 { 77 ながら(J <I &&(CALC(J、I、0)> = K || CALC(J、I、1)> = K))J ++ 。 78 もし(J == I)ブレーク。 79 プレ[I] = J。 80 DP [I] = DP [J] + 1 。 81 } 82 INT ANS =INF、K。 83 J = 0 。 84 担当者(I、0 、N) 85 { 86 であれば(DP [I] == INF)ブレーク。 87 のLL B = CALC(I、J、1 )。 88 一方(J <N && B < K) 89 { 90 J ++ 。 91 B + = B [J]。 92 } 93 であれば(J == N && B <K)ブレーク。 94 LL A = CALC(I、J、0 ); 95 もし(A < K) 96 { 97 であれば(DP [I] <ANS)ANS = DP [i]は、K = I。 98 } 99 } 100 であれば(ANS == INF)のprintf(" -1 \ n " ); 101 そう 102 { 103 のprintf(" %D \ n " 、ANS)。 104 一方(ANS) 105 { 106 のprintf(" %d個" 、K)。 107 K = [k]を事前。 108 ans-- 。 109 } 110 のprintf(" \ n " ); 111 } 112 113 } 114 戻り 0 ; 115 }