東方幻想鄉系列模擬賽T2琪露諾題解

2021-08-08 16:13:29 字數 1909 閱讀 1443

題目描述:

在幻想鄉,琪露諾是以笨蛋聞名的冰之妖精。某一天,琪露諾又在玩速凍青蛙,就是用冰把青蛙瞬間凍起來。但是這只青蛙比以往的要聰明許多,在琪露諾來之前就已經跑到了河的對岸。於是琪露諾決定到河岸去追青蛙。小河可以看作一列格仔依次編號為0到n,琪露諾只能從編號小的格仔移動到編號大的格仔。而且琪露諾按照一種特殊的方式進行移動,當她在格仔i時,她只會移動到i+l到i+r中的一格。你問為什麼她這麼移動,這還不簡單,因為她是笨蛋啊。每乙個格仔都有乙個冰凍指數a[i],編號為0的格仔冰凍指數為0。當琪露諾停留在那一格時就可以得到那一格的冰凍指數a[i]。琪露諾希望能夠在到達對岸時,獲取最大的冰凍指數,這樣她才能狠狠地教訓那只青蛙。但是由於她實在是太笨了,所以她決定拜託你幫它決定怎樣前進。開始時,琪露諾在編號0的格仔上,只要她下一步的位置編號大於n就算到達對岸。

輸入格式:

第 1 行: 3 個正整數 n, l, r

第 2 行: n+1 個整數,第 i 個數表示編號為 i-1 的格仔的冰凍指數 a[i-1]

輸出格式:

第 1 行:乙個整數,表示最大冰凍指數。保證不超過 2^31-1

第 2 行:空格分開的若干個整數,表示琪露諾前進的路線,最後輸出-1 表示到達對岸

輸入樣例:

5 2 3

0 12 3 11 7 -2

輸出樣例:

11 0 3 -1

資料範圍:

對於 60%的資料: n <= 10,000

對於 100%的資料: n <= 200,000

對於所有資料 -1,000 <= a[i] <= 1,000 且 1 <= l <= r <= n

題解:題目大意我就不多說了,看到這道題可以想到dp,狀態轉移方程式也不難想出:

f[j]=max(f[k]+a[j],f[j])(j-r<=k<=j-l)

因為需要求乙個區間中最大的點,如果選擇n的時間掃一遍肯定會爆,所以我們需要使用線段樹來維護乙個區間中的最大節點的值。大概就這樣,有一點需要注意的是陣列的範圍至少要比n的最大值大6000,不然最後一組資料會爆。下面貼**吧。

#include

#include

#include

#include

#define ls l,mid,rt<<1

#define rs mid+1,r,rt<<1|1

using

namespace

std;

const

int n=200005;

int tree[n<<2],n,l,r,f[n<<1],a[n<<1];

void pushup(int rt)

void build(int k,int num,int l,int r,int rt)

int mid=(l+r)>>1;

if(k<=mid) build(k,num,ls);

else build(k,num,rs);

pushup(rt);

}void init()

}int query(int le,int ri,int l,int r,int rt)

int mid=(l+r)>>1;

if(ri<=mid)

if(le>mid)

if(le<=mid&&ri>mid)

}void dfs(int k)

for(int i=max(k-r,0);i<=k-l;i++)

}if(k>=n)

printf("%d ",k);

return ;

}void work()

int maxn=0,ord;

for(int i=n;i<=n+r;i++)

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

dfs(ord);

}int main()

模擬 2018 9洛谷月賽T2

傳送門 一道模擬題?根據給出的條件可以分類討論列出關於k的不等式,然後求區間的交 但是求交不好求,可以轉化成求補集的並,還是挺常見的套路 具體實現還是很有技巧的,可以用結構體存這個點和它的型別 左端點or右端點 然後通過排序求並,具體細節看注釋 include include include inc...

20161005 NOIP 模擬賽 T2 解題報告

beautiful 2.1 題目描述 乙個長度為 n 的序列,對於每個位置 i 的數 ai 都有乙個優美值,其定義是 找到序列中最 長的一段 l,r 滿足 l i r,且 l,r 中位數為 ai 我們比較序列中兩個位置的數的大小時,以數值為第一關鍵字,下標為第二關鍵字比較。這樣的話 l,r 的長度只...

20161003 NOIP 模擬賽 T2 解題報告

weed duyege的電腦上面已經長草了,經過辨認上面有金坷垃的痕跡。為了查出真相,duyege 準備修好電腦之後再進行一次金坷垃的模擬實驗。電腦上面有若干層金坷垃,每次只能在上面撒上一層高度為 vi 的金坷垃,或者除掉最 新 vi 層 不是量 撒的金坷垃。如果上面只留有不足 vi 層金坷垃,那麼...