藍橋杯 試題 演算法提高 雙十一搶購

2021-10-24 10:20:37 字數 2442 閱讀 5215

資源限制

時間限制:1.0s 記憶體限制:256.0mb

問題描述

一年一度的雙十一又來了,某網購**又開始了半價銷售的活動。

小g打算在今年的雙十一裡盡情地購物,以享受購買的極度快感,她已經列好了她想買的物品的列表。

當然小g並不是出身富貴家庭,所以她網銀裡的錢只是乙個有限的整數s(單位:元)。

這次搶購她打算遵循這三個原則選擇每乙個物品:

1.先買能「賺」最多的;

2.在「賺」一樣多的情況下,先買最便宜的(這樣買的東西就可能更多了);

3.在前兩條裡都判斷不了購買順序的話,先購買在列表裡靠前的。

(由於**裡還是有一部分商品並沒有打五折,所以2的情況(「賺」的錢數為0)是完全可能發生的)

現在,在雙十一的這一天,你要幫小g編寫乙個程式,來看看她應該去買她列表裡的哪些物品。(總**不要超過s哦)

要是幫她寫好這個程式的話,或許你能在光棍節這一天裡贏得她的芳心哦~

輸入格式 

輸入共n+1行。

第一行包含兩個整數s和n,s表示小g的可用金額,n表示她看上的物品個數。

接下來n行,對應每乙個物品,每行有兩個整數a和b,a是物品的原價(單位:元),b為0或1,若b為0,則此物品不半價,若b為1,則此物品半價銷售。 

輸出格式

輸出共一行,為小g要買的物品序號(從1開始),用空格隔開,注意按序號從小到大輸出。

若小g一件都買不了,則輸出0.

10 3

5 04 0

10 1

2 3

10 3

11 0

21 1

100 1

按照題目的三個條件進行排序即可,先比較賺的錢,賺的錢相同時,比較賣價,賣價也相同時比較id。

bool

cmp(mo a,mo b)

需要注意的是,不能想當然的認為第三個條件(即按id排序)預設。

// 方法一:直接計算所有的值,進行比較

#include

#include

#include

using

namespace std;

struct mo

;bool

cmp(mo a,mo b)

intmain()

sort

(m+1

,m+1

+n,cmp)

;for

(int i=

1;i<=n;i++)if

(m[i]

.mai<=s)

if(v.

size()

==0) cout<<

"0";

else

return0;

}

//方法二:

//有打折活動和無打折活動分開排序

//先買有活動的商品:有打折活動時,打折都打五折,則原價越高,賺的越多。賺得相等的情況,說明原價一樣,則按列表購買。 即原價從高到低排序 。

//後買無活動的商品:按原價排序,先買便宜的。 即原價從低到高排序。

#include

#include

#include

using

namespace std;

struct com

;int

high_low

(com a,com b)

intlow_high

(com a,com b)

intmain()

}sort

(dis.

begin()

,dis.

end(

),high_low)

;sort

(undis.

begin()

,undis.

end(

),low_high)

;for

(int i=

0;isize()

;i++)if

(s>=dis[i]

.yuan)

for(

int i=

0;isize()

;i++)if

(s>=undis[i]

.yuan)

if(num.

size()

==0)sort

(num.

begin()

,num.

end())

;for

(int i=

0;isize()

;i++

) cout<<<

" ";

return0;

}

演算法提高 雙十一搶購 C

問題描述 一年一度的雙十一又來了,某網購 又開始了半價銷售的活動。小g打算在今年的雙十一裡盡情地購物,以享受購買的極度快感,她已經列好了她想買的物品的列表。當然小g並不是出身富貴家庭,所以她網銀裡的錢只是乙個有限的整數s 單位 元 這次搶購她打算遵循這三個原則選擇每乙個物品 1.先買能 賺 最多的 ...

藍橋杯 試題 演算法提高 成績排序

資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 給出n個學生的成績,將這些學生按成績排序,排序規則,優先考慮數學成績,高的在前 數學相同,英語高的在前 數學英語都相同,語文高的在前 三門都相同,學號小的在前 輸入格式 第一行乙個正整數n,表示學生人數 接下來n行每行3個0 100...

藍橋杯 試題 演算法提高 質數

第一種 資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 給定乙個正整數n,請你輸出n以內 不包含n 的質數以及質數的個數。輸入格式 輸入一行,包含乙個正整數n。輸出格式 共兩行。第1行包含若干個素數,每兩個素數之間用乙個空格隔開,素數從小到大輸出。第2行包含乙個整數,表示n以內質...