牛客练习赛20 EF
托米历险记
题目描述
这天,托米家的电影院门口排起了长队--因为最新的电影"托米历险记"就要上映了!
每个人都有且仅有一张面值为25或50或100元的钞票.一张电影票的价格是25元.
托米想知道售票员能否在初始金钱为0并且按排队顺序售票的情况下完成找零.
托米想知道售票员能否在初始金钱为0并且按排队顺序售票的情况下完成找零.
输入描述:
第一行一个数字n,表示排队的人的数量.i
第二行n个数字,第i个数字为a
,表示队伍中第i个人所持有的钞票的面值.
输出描述:
如果售票员能完成找零,输出"YES"(不含引号).
反之输出"NO".
备注:
1≤n≤105
签到题。
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)需要花费ai枚金币,托米总共有n枚金币.
托米想知道他能得到的最大数字是多少.
每填写一次数字(1≤ i≤9)需要花费ai枚金币,托米总共有n枚金币.
托米想知道他能得到的最大数字是多少.
输入描述:
第一行一个数字n,表示金币总数.
第二行9个正整数,第i个数字表示填写一次数字i所需要的金币数.
输出描述:
输出满足条件的最大数字.
备注:
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 }