11 06信競快樂模擬賽

2022-05-25 22:51:09 字數 4166 閱讀 1769

【時間限制】1000ms 【空間限制】65536kb

【輸入檔案】melon.in 【輸出檔案】melon.out

【題目描述】

todobe和yahsem66比賽吃瓜。

桌上一共有n塊瓜,他們可以從桌上拿走不多於k塊瓜來吃,吃一塊瓜需要1分鐘的時間,只有吃完手裡的所有瓜之後才可以再去拿瓜,拿瓜的時間不計。如果兩人在同一時間點拿瓜,yashem66會發揚謙讓精神讓todobe先拿,開始比賽時也是todobe先拿。

舉個例子,如果n=10,k=4,todobe先拿走3塊,yashem66拿走2塊,yashem66吃完之後todobe還有1塊沒有吃完。yashem66再拿走4塊,然後todobe就只能再吃到1塊,最終todobe吃了4塊,而yashem66吃了6塊。

兩個人都想盡可能吃更多的瓜,貪吃的todobe想知道她最多能吃到多少塊瓜。

【輸入】

輸入包括一行兩個整數,n、k。

【輸出】

輸出一行乙個整數,代表todobe最多能吃到多少塊瓜。

【樣例輸入1】

2 1【樣例輸出1】

1【樣例輸入2】

10 4

【樣例輸出2】

5【資料範圍與約定】

對於0%的資料,與樣例相同;

對於10%的資料,n<=2*k;

對於另30%的資料,k=2;

對於100%的資料,n,k<=100000。

考試的時候直接通過樣例和自己造的幾組簡單規律得出了規律,但有部分錯誤:

問題在於n<=2k時,k不一定一定小於n,則需要k op n

分析過程(網上找的)

n<=k直接是n,k2k時,考慮一次只吃乙個瓜,這樣就有更大決策空間

當剩餘瓜數<=2*k時#接選k個

所以答案為ceil(n/2)

#include #include #include using namespace std;

const int maxn=100005;

int ans;

int main()

【時間限制】2000ms 【空間限制】524288kb

【輸入檔案】change.in 【輸出檔案】change.out

【題目描述】

todobe開了一家店,yashem66連續n天都會光顧這家店。

yashem66只有100元的紙幣和1元的硬幣,他知道todobe懶的一批,很討厭找零這件事情,每天todobe都會有乙個心情值wi,如果todobe第i天需要找零,那她的不愉悅度就會增加wi*找零的錢數。當todobe需要找零時,她也會找給yashem66若干1元硬幣,但她不會找給yashem66 100個及以上的硬幣。

假設yashem66一開始有足夠的紙幣和m個硬幣,他在第i天,會買價值ci元的產品。他想盡可能降低todobe的不愉悅度,請你告訴他todobe 的不愉悅度最少是多少。

【輸入】

第一行兩個整數n、m。

第二行有n個整數,第i個整數代表ci,第i天yashem66購買的**。

第三行有n個整數,第i個整數代表wi,第i天todobe的心情值。

【輸出】

輸出一行乙個整數代表todobe不愉悅度的最小值。

【樣例輸入1】

5 42

117 71 150 243 200

1 1 1 1 1

【樣例輸出1】

79【樣例解釋1】

第一天花費1張100元紙幣和17個1元硬幣,剩餘25個硬幣,不愉悅度為0;

第二天花費1張100元紙幣,找零29,剩餘54個硬幣,不愉悅度為29;

第三天花費2張100元紙幣,找零50,剩餘104個硬幣,不愉悅度為79;

第四天花費2張100元紙幣和43個1元硬幣,剩餘61個硬幣,不愉悅度為79;

第五天花費2張100元紙幣,不愉悅度為79.

【樣例輸入2】

5 42

117 71 150 243 200

5 4 3 2 1

【樣例輸出2】

230【樣例解釋2】

第一天花費1張100元紙幣和17個1元硬幣,剩餘25個硬幣,不愉悅度為0;

第二天花費1張100元紙幣,找零29,剩餘54個硬幣,不愉悅度為116;

第三天花費1張100元紙幣和50個1元硬幣,剩餘4個硬幣,不愉悅度為116;

第四天花費3張100元紙幣,找零57,剩餘61個硬幣,不愉悅度為230;

第五天花費2張100元紙幣,不愉悅度為230.

【資料範圍與約定】

對於0%的資料與樣例相同;

對於20%的資料,n<=20;

對於另20%的資料,ci=1;

對於100%的資料,n<=105,m<=109,1<=ai,ci<=10^5。

考試的時候用的暴力回溯,20分。

正解:

貪心,貪每一步都讓找零的時候最小的不快樂值,每次硬幣不夠的時候就取不快樂值最小的那次的硬幣。

以下的「錢」都指需要付的硬幣數量,並令當前硬幣量為coin

考慮每一步:

將需要找零時的不快樂指數存在乙個堆中

因為不管錢夠還是不夠都需要付這部分錢:

則coin-=c[i];

如果coin<0

則取不快樂指數最小的取出並加上。

現在的硬幣數量為coin+100

(因為找零的數量為:100-c[i])

#include #include #include using namespace std;

const int maxn=1e5+5;

int n,m;

long long ans=0;

priority_queuefanvree 很聰明,解決難題時他總會把問題簡單化。 例如,他就整天喜歡把圖轉化為樹。但是他不會縮環,那他怎麼轉化呢? 這是乙個有 n 個點 m 條雙向邊的圖,fanvree 會選定乙個節點,然後刪掉這個節點和這個點連出去的邊, 如果變成了一棵樹,那麼這個節點便是可行的,什麼是樹呢?樹也即無簡單環的無向連通圖。 告訴 fanvree 可能的節點是什麼。

輸入:第一行兩個正整數 n 和 m,表示有 n 個點 m 條邊,保證 n≥2。 接下來 m 行,每行兩個整數 v,u,表示 v 和 u 之間有一條無向邊 1≤v,u≤n,保證沒 有重邊和自環。

輸出:第一行乙個正整數 ns,表示這個圖中有 ns 個結點可選。 接下來一行,共 ns 個整數,每個整數表示乙個可選結點的編號。 請按編號從小到大的順序輸出。 資料保證圖中至少存在乙個可選的結點。

樣例輸入:

6 61 2

1 32 4

2 54 6

5 6樣例輸出:

34 5 6

資料範圍:

對於 40%的資料:n,m<=1000;

另外存在 10%的資料:m=n-1;

考試的時候用的暴力+bfs,即列舉每個被刪除的點,再用bfs檢查是否為樹和連通圖(當然檢查是否是樹的時候用的father陣列胡亂做的)

正解:

很簡單的一道圖論題。

根據題意:

刪除乙個點形成樹必須滿足的條件:

1、刪除這條點後有頂點-1條邊

2、刪除點後依舊為連通圖(即非割點)

重點就是求割點的tarjan

#include #include #include #include using namespace std;

const int maxn=100005;

int n,m,root=1;

vectorg[maxn];

bool cutpoint[maxn];

int dfn[maxn],low[maxn],t;

int edge[maxn],ans[maxn],newp=0;

void init()

}void tarjan(int u)

else low[u]=min(low[u],dfn[v]); }}

int main()

2023年信競說

回顧2020年,有歡笑也有悔恨,更是充實的埋頭苦幹的一年。我是一名資訊競賽生。年初,我算是過了一段比較不錯的日子。在迷糊的假期中忙著聽課 考試 刷題 作業 於是開學了,這一年再也沒有這麼漫長的時光了。ccf推遲了省選,所以還是有一段時間可以複習的。為什麼這麼說呢?寒假的低效學習,根本沒有複習的效果。...

NOIP模擬(11 06)T1 數集

數集 題目背景 11.06 noip 模擬t1 分析 佇列 考慮暴力的想法當然是直接維護乙個堆,每一次取出最小的乙個,然後把 2 x 1,3 x 1 push 進去,但是看看最大資料,1000000 還有10 組資料,這怕不是要死人 於是乎,認真想正解,然後就發現了,顯然,因為每一次取出的數是一次遞...

bzoj 1106 貪心 樹狀陣列 或 棧模擬

題意 n個數,各出現兩次,當兩個相同的數相鄰時,這兩個數同時消除,上方的方塊同時下落且可繼續消除滿足條件的。每次可交換相鄰的兩個方塊,求最少交換次數使得所有數全消除 首先,對於一對相同的數中間有另一對的情況 即兩對相同的數是巢狀關係 肯定要先消除另一對 其次,對於一對相同的數中間有另一對中的乙個的情...