hdu 6119 小小粉絲度度熊 想法題

2021-08-07 05:58:13 字數 1356 閱讀 7878

problem description

度度熊喜歡著喵哈哈村的大明星——星星小姐。

為什麼度度熊會喜歡星星小姐呢?

首先星星小姐笑起來非常動人,其次星星小姐唱歌也非常好聽。

但這都不是最重要的,最重要的是,星星小姐拍的一手好**!

於是度度熊關注了星星小姐的貼吧。

一開始度度熊決定每天都在星星小姐的貼吧裡面簽到。

但是度度熊是乙個非常健忘的孩子,總有那麼幾天,度度熊忘記簽到,於是就斷掉了他的連續簽到。

不過度度熊並不是非常悲傷,因為他有m張補簽卡,每一張補簽卡可以使得某一忘簽到的天,變成簽到的狀態。

那麼問題來了,在使用最多m張補簽卡的情況下,度度熊最多連續簽到多少天呢?

input

本題包含若干組測試資料。

第一行兩個整數n,m,表示有n個區間,這n個區間內的天數,度度熊都簽到了;m表示m張補簽卡。

接下來n行,每行兩個整數(l[i],r[i]),表示度度熊從第l[i]天到第r[i]天,都進行了簽到操作。

資料範圍:

1<=n<=100000

0<=m<=1000000000

0<=l[i]<=r[i]<=1000000000

注意,區間可能存在交叉的情況。

output

輸出度度熊最多連續簽到多少天。

因為區間交叉,首先預處理,找出不交叉的區間。

然後區間間隙求字首和。

掃瞄,某段和不大於m就是可行的,求最大的。

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

typedef pair pii;

const

int n=1e5+9;

pii a[n];

int n,m;

ll sum[n];

int main()

sum[0]=0;

for(int i=1;i<=cnt;i++)sum[i]=sum[i-1]+a[i].first-a[i-1].second-1;

ll ans=0;

for(int l=0,r=0;l<=cnt && r<=cnt;l++)

printf("%lld\n",ans );

}return

0;}

HDU6119 小小粉絲度度熊

思路 如果我們把覆蓋的區間和未覆蓋的分開,那麼我們可以構造出乙個序列 例如 7543598 粗體的表示中間沒有簽到的部分,而相鄰的部分就是已經連續簽到了的部分。那麼題目實際上就是我們可以單獨的覆蓋m天,然後怎麼樣覆蓋才能獲得最大的連續區間,然後求出這個連續的區間大小。嗯,根據範圍基本上確定是乙個nl...

hdu6119 小小粉絲度度熊

題目傳送門 思路 首先題目中說區間可能有交叉,所以第一步我們先處理一下區間重疊的情況把重疊的區間合併一下 第二步我們只需要尺取一下找最大區間就可以了 include include include include using namespace std const int maxn 1e9 7 st...

HDU6119 小小粉絲度度熊(區間)

區間有n個區間,這n個區間內的天數,都簽到了,m表示m張補簽卡 區間可能存在交叉的情況,求最多連續簽到多少天 include include include include using namespace std typedef long long ll int n,m const int maxn...