百度之星2019初賽第一場T2

2021-09-26 06:41:17 字數 1102 閱讀 6210

problem description

度度熊在玩乙個好玩的遊戲。 遊戲的主人公站在一根數軸上,他可以在數軸上任意移動,對於每次移動,他可以選擇往左或往右走一格或兩格。 現在他要依次完成 nn 個任務,對於任務 ii,只要他處於區間 [a_i,b_i][a​i​​,b​i​​] 上,就算完成了任務。 度度熊想知道,為了完成所有的任務,最少需要移動多少次? 度度熊可以任意選擇初始位置。

input

第一行乙個整數 t~(1 \leq t \leq 10)t (1≤t≤10) 表示資料組數。 對於每組資料,第一行乙個整數 n~(1 \leq n \leq 1000)n (1≤n≤1000) 表示任務數。 接下來 nn 行,第 ii 行兩個整數 a_i, b_i~(1 \leq a_i \leq b_i \leq 1000000)a​i​​,b​i​​ (1≤a​i​​≤b​i​​≤1000000) 表示任務對應的區間。

output

對於每組資料,一行乙個整數表示答案。

sample input

1

21 10

20 30

sample output

5

樣例描述

選取10為起點,經過的軌跡為10-12-14-16-18-20。

考慮到用最小代價可以到達的點一定是連續的,

我們設當前可以用最小代價到達的區間為[l,r],現在的目標區間為[a,b],

如果我們位於點集[l,r],要求最少步數走到中的任意乙個點[a,b],我們就可以分類討論

當[l,r]與[a,b]有交集,我們就可以取它們的交集部分,且不花任何代價

當r如果是走到a,那麼新的最小代價區間就是[a,a]

如果是走到a-1,那麼新的最小代價區間就是[a,a+1]

b**:

#include#define maxn 1005

using namespace std;

int t,n,a,b,l,r,ans;

int main()

else if(a>r)

else l=max(l,a),r=min(r,b);

}printf("%d\n",ans);

}}

Game 2019百度之星初賽第一場

由於要依次完成任務,所以對於我們從前到後把可以取交集的取交集,不行就新開一段。這樣由於要從前到後完成任務,就是這些互不相交的交集區間要依次到達。於是我們先根據第二個區間的位置選擇第乙個區間開始的起點 然後就每次根據下乙個區間與這個區間的相對位置選擇到達的端點就行了。有個小細節,就是走到端點長度為奇數...

2019 百度之星初賽第一場A B E 補C

度度熊最近學習了多項式和極限的概念。現在他有兩個多項式 f x 和g x 他想知道當 x趨近無限大的時候,f x g x 收斂於多少。include using namespace std intmain for int i 0 i t i if mfmi mgmi cout 1 0 n else ...

2012百度之星初賽第一場題B小小度刷禮品

初賽第一場完整題目見 這裡 第二題 小小度刷禮品以 x結尾的參賽選手將得到精美禮品乙份。小小度同學非常想得到這份禮品,於是他就連續狂交了很多次,提交id從a 連續到b 他想問問你他能得到多少份禮品,你能幫幫他嗎?輸入 第一行乙個正整數t 表示資料組數 接下去t 行,每行三個正整數x,a,b 0 x ...