資訊學奧賽真題解析(文具訂購)

2021-10-05 07:08:33 字數 2080 閱讀 3496

[noi online 入門組]文具訂購

小明的班上共有n元班費,同學們準備使用班費集體購買3種物品:

1.圓規,每個7元。

2.筆,每支4元。

3.筆記本,每本3元。

小明負責訂購文具,設圓規,筆,筆記本的訂購數量分別為a,b,c,他訂購的原則依次如下:

1.n元錢必須正好用光,即7a+4b+3c=n。

2.在滿足以上條件情況下,成套的數量盡可能大,即a,b,c中的最小值盡可能大。

3.在滿足以上條件情況下,物品的總數盡可能大,即a+b+c盡可能大。

請你幫助小明求出滿足條件的最優方案。可以證明若存在方案,則最優方案唯一。

【輸入格式】

從檔案order.in中讀入資料。

僅一行乙個整數n表示班費數量。

【輸出格式】

輸出到檔案order.out中。

若方案不存在則輸出-1。否則輸出一行三個用空格分隔的非負整數a,b,c表示答案。

【樣例1輸入】

1【樣例1輸出】

-1【樣例2輸入】

14【樣例2輸出】

1 1 1

【樣例3輸入】

33【樣例3輸出】

1 2 6

【樣例3解釋】

a=2,b=4,c=1也是滿足條件1,2的方案,但對於條件3,該方案只買了7個物品,不如a=1,b=2,c=6的方案。

【資料範圍與提示】

對於測試點1~6:ns14。

對於測試點712:n是14的倍數。對於測試點1318:n≤100。對於所有測試點:0sn≤105。

【時間限制】

1.0s

【空間限制】

256mb

【上傳檔案】

上傳c,cpp或pas語言源程式,檔名應依次為order.c,order.cpp,order.pas。

【示例**】

#include

#include

intmain

(int argc,

char

*ar**)

//排除掉不成立的條件

else

if(n%

14==0)

//排除正好成套的條件

else

if(n%

14==1)

else

if(n%

14==2)

else

if(n%

14==

3) c+=1

;else

if(n%

14==

4) b+=1

;else

if(n%

14==5)

else

if(n%

14==

6) c+=2

;else

if(n%

14==

7) a+=1

;else

if(n%

14==

8) b+=2

;else

if(n%

14==

9) c+=3

;else

if(n%

14==10)

else

if(n%

14==11)

else

if(n%

14==

12) c+=4

;else

printf

("%d %d %d\n"

,a,b,c)

;return0;

//fclose(stdin);

//fclose(stdout);

}

資訊學奧賽真題解析(划拳2)

1046.划拳 15 划拳是古老中國酒文化的乙個有趣的組成部分。酒桌上兩人划拳的方法為 每人口中喊出乙個數字,同時用手比劃出乙個數字。如果誰比劃出的數字正好等於兩人喊出的數字之和,誰就贏了,輸家罰一杯酒。兩人同贏或兩人同輸則繼續下一輪,直到唯一的贏家出現。下面給出甲 乙兩人的划拳記錄,請你統計他們最...

資訊學奧賽

排列與組合是常用的數學方法,其中組合就是從n個元素中抽出r個元素 不分順序且r n 我們可以簡單地將n個元素理解為自然數1,2,n,從中任取r個數。現要求你用遞迴的方法輸出所有排列。一行兩個自然數n r 1 include include includeusing namespace std int...

資訊學奧賽

時間限制 1000 ms 記憶體限制 65536 kb 提交數 3478 通過數 2486 給定乙個由不同的小寫字母組成的字串,輸出這個字串的所有全排列。我們假設對於小寫字母有 a b y z 而且給定的字串中的字母已經按照從小到大的順序排列。只有一行,是乙個由不同的小寫字母組成的字串,已知字串的長...