2020 02 13普及C組模擬賽6(第二題)

2021-10-03 07:15:03 字數 2122 閱讀 7926

題目描述

農場主約翰養了兩群有世仇的牛,它們被稱為蒙塔戈斯家族和卡普魯特家族。蒙塔戈斯家族的成員,羅密歐,愛上了美麗的朱麗葉,但後者正好是卡普魯特家族的成員。羅密歐希望與朱麗葉約會,但不希望卡普魯特家族的其他成員發現(否則會有可怕的事情發生!)
​ 羅密歐和朱麗葉希望在牧場柵欄邊一塊盡可能大的區域中相見,這樣他們可以邊散步邊聊天。然而,這塊區域中不應該有太多的卡普魯特家族成員,否則,他們倆被發現的機會就會大得多。羅密歐發現在整個牧場柵欄邊有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分...