• 牛客练习赛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
    ");
    12             ans -= 25;
    13         } else if(x == 100) {
    14             if(ans < 75) return 0*printf("NO
    ");
    15             ans -= 75;
    16         }
    17     }
    18     printf("YES
    ");
    19     return 0;
    20 }

    填数字

    题目描述

    托米发现了一种新的游戏--填数字!
    每填写一次数字(1≤ i≤9)需要花费ai枚金币,托米总共有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
    ");
    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("
    ");
    28     return 0;
    29 }
     
  • 相关阅读:
    省选模拟47 题解
    省选模拟46 题解
    死磕 java集合之PriorityQueue源码分析
    拜托,面试别再问我堆(排序)了!
    死磕 java集合之ConcurrentSkipListSet源码分析——Set大汇总
    死磕 java集合之CopyOnWriteArraySet源码分析——内含巧妙设计
    死磕 java集合之TreeSet源码分析
    死磕 java集合之LinkedHashSet源码分析
    死磕 java集合之HashSet源码分析
    死磕 java集合之ConcurrentSkipListMap源码分析——发现个bug
  • 原文地址:https://www.cnblogs.com/xingkongyihao/p/9189204.html
Copyright © 2020-2023  润新知