【CF1250G】廃棄ゲーム(DP)

問題の意味:ゲームをプレイ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対< INTINT > 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 ] = { - 1100 }。
33        のint DY [ 4 ] = { 00、 - 11 }。
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 = - 1C =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 }

 

おすすめ

転載: www.cnblogs.com/myx12345/p/11814176.html