牛客练习赛20 EF

托米历险记

题目描述

这天,托米家的电影院门口排起了长队--因为最新的电影"托米历险记"就要上映了!
每个人都 有且仅有一张面值为25或50或100元的钞票.一张电影票的价格是25元.
托米想知道售票员能否在初始金钱为0并且按排队顺序售票的情况下完成找零.

输入描述:

第一行一个数字n,表示排队的人的数量.
第二行n个数字,第i个数字为a
i
,表示队伍中第i个人所持有的钞票的面值.

输出描述:

如果售票员能完成找零,输出"YES"(不含引号).
反之输出"NO".
示例1

输入

复制
4
25 25 50 50

输出

复制
YES
示例2

输入

复制
4
50 50 25 25

输出

复制
NO

备注:

1≤n≤10
5
 
签到题。
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 int main() {
 5     int n, x, ans = 0;
 6     cin >> n;
 7     for(int i = 0; i < n; i ++) {
 8         cin >> x;
 9         if(x == 25) ans += x;
10         if(x == 50) {
11             if(ans < 25) return 0*printf("NO\n");
12             ans -= 25;
13         } else if(x == 100) {
14             if(ans < 75) return 0*printf("NO\n");
15             ans -= 75;
16         }
17     }
18     printf("YES\n");
19     return 0;
20 }

填数字

题目描述

托米发现了一种新的游戏--填数字!
每填写一次数字(1≤ i≤9)需要花费a i枚金币,托米总共有n枚金币.
托米想知道他能得到的最大数字是多少.

输入描述:

第一行一个数字n,表示金币总数.
第二行9个正整数,第i个数字表示填写一次数字i所需要的金币数.

输出描述:

输出满足条件的最大数字.
示例1

输入

复制
5
5 4 3 2 1 2 3 4 5

输出

复制
55555
示例2

输入

复制
2
9 11 1 12 5 8 9 10 6

输出

复制
33
示例3

输入

复制
0
1 1 1 1 1 1 1 1 1

输出

复制
-1

备注:

0≤ n≤ 106

1≤ ai≤ 105


先全部选最小花费的,这样可以使的长度最长,然后看剩下的金币能不能用更大的数补充。
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int a[10], n;
 4 int main() {
 5     int MIN = 1e6, cnt;
 6     cin >> n;
 7     for(int i = 1; i < 10; i ++) {
 8         cin >> a[i];
 9         if(a[i] <= MIN) {
10             MIN = a[i];
11             cnt = i;
12         }
13     }
14     int ans = n / MIN;
15     if(ans == 0) return 0*printf("-1\n");
16     n %= MIN;
17     for(int i = 9; i >= 1; i --) {
18         if(i <= cnt) break;
19         int num = n / (a[i]-MIN);
20         n -= num*(a[i]-MIN);
21         while(num) {
22             printf("%d",i);
23             ans--;num--;
24         }
25     }
26     for(int i = 1; i <= ans; i ++) printf("%d",cnt);
27     printf("\n");
28     return 0;
29 }
 

猜你喜欢

转载自www.cnblogs.com/xingkongyihao/p/9189204.html