題目描述
農場主約翰養了兩群有世仇的牛,它們被稱為蒙塔戈斯家族和卡普魯特家族。蒙塔戈斯家族的成員,羅密歐,愛上了美麗的朱麗葉,但後者正好是卡普魯特家族的成員。羅密歐希望與朱麗葉約會,但不希望卡普魯特家族的其他成員發現(否則會有可怕的事情發生!)
羅密歐和朱麗葉希望在牧場柵欄邊一塊盡可能大的區域中相見,這樣他們可以邊散步邊聊天。然而,這塊區域中不應該有太多的卡普魯特家族成員,否則,他們倆被發現的機會就會大得多。羅密歐發現在整個牧場柵欄邊有p塊草坪呈直線排列(1<=p<=1000),在這些草坪上總共有n位卡普魯特家族的成員在吃草(1<=n<=1000)。每個卡普魯特家族的成員在一些相鄰的草坪上吃草。現在,羅密歐求助於聰明的你,希望你能找出乙個最大的範圍(指一些相鄰的草坪),在這個範圍的草坪中,至多有c(1<=c<=1000〉位卡普魯特家族的成員在吃草。
輸入
第一行,包含三個整數:n,p,c
第二至n+1行:每行包括乙個整數x(1<=x<=p-1),代表乙個卡普魯特家族成員在柵欄邊的第x和x+1塊草坪之間吃草,多個卡普魯特家族成員可以在同一塊草坪內一起吃草。
輸出
只有一行:乙個整數,代表乙個最大的草坪範圍(指這些草坪的塊數),在這個範圍內最多只有c個卡普魯特家族的成員在吃草。
樣例輸入
2 6 1
(解釋:柵欄邊的草坪分為六塊:1 2 3 4 5和6。有兩個卡普魯特家族成員,乙個在第二和第三塊草坪上吃草,乙個在第三和第四塊草坪上吃草)
樣例輸出
(解釋:在第四塊至至第六塊草坪間只有乙個卡普魯特家族的成員在吃草)
資料範圍限制
1<=p<=1000
1<=n<=1000
1<=c<=1000
正解
這題如果我們用暴力,就會超時。所以,我們只能用dp來解決問題。
假設f[i]=從1到i中,卡普魯特家族的個數(要用到字首和)
for
(int i=
1;i<=p;i++
) f[i]
=f[i-1]
+(a[i]
-b[i]);
//要記得減去,不然羊的個數會增多
最後再用乙個迴圈,找到最大值就ok了
for
(long
long i=
1;i<=p;i++
)//下面是dp
for(
long
long j=
1;j(f[i]
-f[j]
<=c)
ac**
#include
#include
using
namespace std;
long
long n,p,c,x,m,a[
1005
],b[
1005
],f[
1005];
intmain()
for(
int i=
1;i<=p;i++
) f[i]
=f[i-1]
+(a[i]
-b[i]);
//要記得減去,不然羊的個數會增多
for(
long
long i=
1;i<=p;i++
)//下面是dp
for(
long
long j=
1;j(f[i]
-f[j]
<=c)
cout
}
2020.02.13普及c組模擬賽6(第一題)
2020.02.13普及c組模擬賽6(第二題)
2020.02.13普及c組模擬賽6(第三題)
2020.02.13普及c組模擬賽6(第四題)
2020.02.13普及c組模擬賽6(總結)
2020 02 13普及C組模擬賽6(總結)
t1 花了1個小時才想到正解,開始想錯了,後來就用冒泡ac了 t2知道用dp,寫錯了,忘記減去重複的羊的個數了,比完賽發現不對,改過來才ac 唉 唉 唉 嘆氣三連 無奈t3 知道用區間,但是不會打,用暴力成功爆零。經過講解,知道區間的5種情況,才act4 還快就想到了正解,開始忘記加乙個特判,後來發...
2020 02 13普及C組模擬賽6(第三題)
題目描述 題目 農夫約翰最近正在將他的柵欄粉刷一下 這裡所有的柵欄都是在一條直線上的 他是這樣來粉刷的 他從位置0出發,然後執行n條指令,例如,指令可以是 10 l 表示約翰從當前的位置向左移動10個單位的距離,並且粉刷移動過程中遇到的柵欄,又或者是 15 r 表示約翰從當前的位置向右移動15個單位...
2020 10 05 普及組 模擬賽C組總結
總結這次考試沒發揮好,第二題沒有拿滿分,下次要繼續努力 t1 superpow 10 題目大意 已知a b 超級冪 代表 b個a的冪,求n對數的超級冪之積的個位數。正確思路 當打表後可以發現 b是沒用的,如果b大於2,b就等於2,答案和原來的是一樣的。所以處理一下跑個快速冪就行了。至於為什麼拿10分...