中国のタイトル
アイデア:
それでは、どのようですか?
私たちは、小さな石の数がわかりません
S <時間t S と(距離がされたときにtが重複するLCM(S、T) 、すなわちS 、T だけ各2石我々は時間の最小公倍数)、この後の各点の到達可能以上 SXT 距離収縮SXT その上に
なぜ、この減少はできますか?
我々が懸念された後にのみ石の数が、だから<時間tは、 S 及びTは、(距離がある場合に一致するLCMは(S、T)であり、S 、T 時間の最小公倍数)およびその後の各点缶到着
ときの==約t最後に、特別な注意判決
#pragma GCCの最適化(3、 "Ofast"、 "インライン")// O3优化 の#pragma GCC最適化(2)// O2优化 の#include <アルゴリズム> の#include < ストリング > の#include < 文字列・H> する#include <ベクトル> の#include <マップ> 書式#include <スタック> の#include < 設定 > 書式#include <キュー> 書式#include <math.h>の 書式#include <cstdioを> する#include <iomanip> 書式#include <TIME.H> 書式#include <ビットセット> の#include<cmath> の#include <sstream提供> の#include <iostreamの> する#include <CStringの> に#define LL長い長 の#define LS NOD << 1個 の#define RS(NOD << 1)+1 の#define PII対<整数、整数> #define MP make_pair の#define PB一back の#define INF 0x3f3f3f3f CONST ダブル EPS = 1E- 10 。 const int型 MAXN = 2E5 + 10 。 CONST LL MOD = 1E9 + 7 。int型はsgn(ダブル A){ 返す <-epsを?- 1:<EPS?0:1 ;} 使用して 名前空間STDを、 INT F [MAXN]。 int型の石[MAXN]、new_stone [MAXN]、VIS [MAXN]。 int型のmain(){ IOS :: sync_with_stdio(偽); int型L; cinを >> L; INT 、L、R、N。 CIN >> L >> R >> N。 もし(L == R){ int型 CNT = 0 。 以下のために(INT iが= 1 ; I <= N I ++ ){ CINを>> 石[i]は、 もし(石[I]%のL == 0 ) CNT ++ 。 } COUT << CNT << ENDL。 リターン 0 ; } のための(INT iは= 1 ; <I = N I ++ ) CIN >> 石[I]。 ソート(石 + 1、石+ 1個の + N)。 INT P = L * R。 以下のために(INT iが= 1 ; I <= N; I ++ ){ int型の D =石[I] -石[I- 1 ]; もし(D> = P) D = P。 new_stone [I] = new_stone [I- 1 ] + D。 VIS [new_stone [I] = 1 。 } L = new_stone [N] + P。 memsetの(F、0x3fを、はsizeof (F))。 F [ 0 ] = 0 ; 以下のために(INT iが= 1 ; iが<= Lと、I ++ ){ ため(INT J = L; J <= R; J ++){ もし(I> = J){ 場合(VIS [I]) F [I] =分(F [I]、F [IJ] + 1 )。 他 F [I] =分(F [I]、F [I- J])。 } } } int型 ANS = INF。 用(INT ; I <= L I ++ [n]はI = new_stone ) ANS = 分(ANS、F [I])。 coutの << ANS << てendl; リターン 0 ; }