GDOI2016模擬8 15蜘蛛俠

2021-07-04 14:55:23 字數 1230 閱讀 6911

題目

話說世界上有很多超級英雄:蝙蝠俠,蜘蛛俠,超人,名字都寫不出來的人等等。在他們之中有乙個叫kickass。今天他想模仿蜘蛛俠,所以他選擇了一排高樓來跳。

具體來說,他選擇了一列n幢高樓,從左到右標號為1到n。一開始他在第k幢高樓。不幸的是,kickass能力非常有限,只能跳到向左或向右相鄰的高樓,而且他要跳到的樓的高度必須不能大於他現在處在的樓的高度。kickass不想自己看起來很渣渣,所以他在一些高樓頂部放了蹦床,從這些高樓起跳,能跳到任何其他的高樓,不管要跳到的高樓在**或是多高。

你的任務是找到kickass在第k高樓起跳能跳到的最多不同的高樓數。如果kickass跳到一幢高樓超過一次,我們只會算一次。並且,即使kickass沒有重新跳到,第k幢高樓還是要算入答案。

這個比較明顯可以用暴力做:

我們可以發現所有彈簧分別向左、向右連續單調不減的樓都可以到達,那麼先打個標記,並統計入答案內(若s不能到達彈簧,則暴力求s向左、向右最長的單調不增的樓加上等高反向的一段),然後再找沒被標記的最長單調不減或不增的一段,加入答案,輸出ans就行了

這些都可以在o(n)做出來

貼**

#include

#include

#include

#include

using

namespace

std;

#define n 300011

int n,s,ans;

int a[n];

bool bz[n];

bool p;

void init()

void pre()

}if (!bz[s])p=0;

if (!p)return;

}void work()else

if (bz[i-1])

y=1;

else

if (a[i-1]>=a[i])

++y;

else

z=max(y,z);

y=0;

for (int i=n;i;i--)

if (bz[i])else

if (bz[i+1])

y=1;

else

if (a[i+1]>=a[i])

++y;

else

z=max(y,z);

ans+=z;

}else

}void write()

int main()

GDOI2016模擬8 15安全監控

題目 選舉越來越近了,所以 amabo kcarab準備在美國計畫一次旅行,並在wdc和la進行演講。特務為了能夠保護 的安全,需要時刻監控所有 會經過的城市 包括wdc和la 當然,為了使預算不會太大,不會用到af1,而會用汽車作為交通工具。並且,特務計畫在 從wdc到la和回到wdc的旅途中安排...

GDOI2016模擬8 8旋轉

alice和bob發明了乙個新的旋轉遊戲。首先,bob給定n個數組成的序列,並把該序列平均分配成若干個塊,每塊正好包含k個數 k能整除n 第一塊由第1到第k個數構成,第二塊由第k 1個數到第2k個數構成,以此類推。接著,bob要求alice對這個序列進行一系列操作,操作有以下兩種 1.把每塊裡面的數...

GDOI2016模擬8 13總結

這次考差了。但事後想了一下,感覺收穫好大。匯報做題情況 當然,裡面不包含收穫 第一題 我的暴力爆零了,原因又是爆int 做題過程中我想到了與眾不同的演算法,一般人會化簡不等式變成斜率優化做,但由於我對斜率優化不大敏感,而且一般斜率優化的題目都是用凸包 叉積來做,這題我也同樣想著用凸包做,但打完發現有...