NOIP2017 普及 luogu3957 跳房子

2021-08-20 06:44:04 字數 2247 閱讀 1947

題目描述

跳房子,也叫跳飛機,是一種世界性的兒童遊戲,也是中國民間傳統的體育遊戲之一。

跳房子的遊戲規則如下:

在地面上確定乙個起點,然後在起點右側畫 n 個格仔,這些格仔都在同一條直線上。每個格仔內有乙個數字( 整數),表示到達這個格仔能得到的分數。玩家第一次從起點開始向右跳, 跳到起點右側的乙個格仔內。第二次再從當前位置繼續向右跳,依此類推。規則規定:

玩家每次都必須跳到當前位置右側的乙個格仔內。玩家可以在任意時刻結束遊戲,獲得的分數為曾經到達過的格仔中的數字之和。

現在小 r 研發了一款彈跳機械人來參加這個遊戲。但是這個機械人有乙個非常嚴重的缺陷,它每次向右彈跳的距離只能為固定的 d。小 r 希望改進他的機械人,如果他花 g 個金幣改進他的機械人,那麼他的機械人靈活性就能增加 g, 但是需要注意的是,每次彈跳的距離至少為 1。 具體而言, 當g < d時, 他的機械人每次可以選擇向右彈跳的距離為 d-g, d-g+1,d-g+2, …, d+g-2, d+g-1, d+g; 否則( 當g ≥ d時),他的機械人每次可以選擇向右彈跳的距離為 1, 2, 3, …, d+g-2, d+g-1, d+g。

現在小 r 希望獲得至少 k 分,請問他至少要花多少金幣來改造他的機械人。

輸入輸出格式

輸入格式:

第一行三個正整數 n, d, k, 分別表示格仔的數目, 改進前機械人彈跳的固定距離, 以及希望至少獲得的分數。 相鄰兩個數之間用乙個空格隔開。

接下來 n 行,每行兩個正整數x_i, s_i,分別表示起點到第i個格仔的距離以及第i個格仔的分數。 兩個數之間用乙個空格隔開。 保證x_i按遞增順序輸入。

輸出格式:

共一行,乙個整數,表示至少要花多少金幣來改造他的機械人。若無論如何他都無法獲得至少 k 分,輸出-1。

輸入輸出樣例

輸入樣例#1: 複製

7 4 10 2 6 5 -3 10 3 11 -3 13 1 17 6 20 2

輸出樣例#1: 複製

2 輸入樣例#2: 複製

7 4 20 2 6 5 -3 10 3 11 -3 13 1 17 6 20 2

輸出樣例#2: 複製

-1 說明

【輸入輸出樣例 1 說明】

花費 2 個金幣改進後, 小 r 的機械人依次選擇的向右彈跳的距離分別為 2, 3, 5, 3, 4,3, 先後到達的位置分別為 2, 5, 10, 13, 17, 20, 對應 1, 2, 3, 5, 6, 7 這 6 個格仔。這些格仔中的數字之和 15 即為小 r 獲得的分數。

輸入輸出樣例 2 說明

由於樣例中 7 個格仔組合的最大可能數字之和只有 18 ,無論如何都無法獲得 20 分

資料規模與約定

本題共 10 組測試資料,每組資料 10 分。

對於全部的資料滿足1 ≤ n ≤ 500000, 1 ≤ d ≤2000, 1 ≤ x_i, k ≤ 109, |si| < 105。 對於第 1, 2 組測試資料, n ≤ 10;

對於第 3, 4, 5 組測試資料, n ≤ 500

對於第 6, 7, 8 組測試資料, d = 1

普及組這題可真難

dp+單調佇列優化+二分答案

我每次列舉我需要花費的金幣

然後隨著我改造花費的金幣數量增加 我的靈活度增加 獲得的答案肯定是呈現單調性的

然後用單調佇列去維護下最好值

當 超過我右端點的時候就隊頭出列 當小於我左端點的時候就隊尾入隊

#include

#include

#include

#define n 550000

#define inf 0x3f3f3f3f

using

namespace

std;

inline

char gc()

return *s++;

}inline

long

long read()

while (ch<='9'&&ch>='0')

return x*f;

}int a[n],n,d,k,s[n];long

long f[n];

inline

bool check(int x)

}return

false;

}int main()if (l>1e9) printf("-1");else

printf("%d",r+1);

return

0;}

NOIP 2017 普及組 初賽

noip 2017 普及組 初賽 頭一次,短時間內把同年的 提高組 初賽 普及組 初賽 題目做了一遍。感覺是,普及組的題目相比提高組,真是弱爆了,完全不在乙個層次,題目做下來真的很菜。一 單項選擇題 1.補碼計算原碼,保留首位的符號位不變,剩下的位取反加1.補碼 10101011 補碼取反 1101...

NOIP2017普及組 棋盤

noip2017 有乙個m m的棋盤,棋盤上每乙個格仔可能是紅色 黃色或沒有任何顏色的。你現在 要從棋盤的最左上角走到棋盤的最右下角。任何乙個時刻,你所站在的位置必須是有顏色的 不能是無色的 你只能向上 下 左 右四個方向前進。當你從乙個格仔走向另乙個格仔時,如果兩個格仔的顏色相同,那你 不需要花費...

NOIP2017普及組 成績

分析 成績牛牛最近學習了c 入門課程,這門課程的總成績計算方法是 總成績 作業成績 20 小測成績 30 期末考試成績 50 牛牛想知道,這門課程自己最終能得到多少分。輸入檔名為score.in。輸入檔案只有1 行,包含三個非負整數a b c,分別表示牛牛的作業成績 小測 成績和期末考試成績。相鄰兩...