zoukankan      html  css  js  c++  java
  • ZOJ4067 Books(思维)

    题意:

    按顺序买书,遇到买不起的书就跳过,遇到买的起的书必须买。

    他买了M本书,询问他最少有多少钱。

    题解:

    先计算价格为0的书的数量,这些书必须买,如果M小于这个数值,直接输出Impossible

    然后遍历一遍挑选价格非0的书直到总数为M

    然后遍历剩下的书,取价格最小值。

    挑选的书籍的总价格加上最小值减一就是答案

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e5+10;
    typedef long long ll;
    int a[maxn];
    int N,M;
    int T;
    int main () {
        scanf("%d",&T);
        while (T--) {
            scanf("%d%d",&N,&M);
            int numZr=0;
            for (int i=1;i<=N;i++) {
                scanf("%d",&a[i]);
                numZr+=a[i]==0;
            }
            if (M==N) {
                printf("Richman
    ");
                continue;
            }
            if (M<numZr) {
                printf("Impossible
    ");
                continue;
            }
            if (M>N) {
                printf("Impossible
    ");
                continue;
            }
            ll ans=0;
            int num=numZr;
            int Min=1e9;
            for (int i=1;i<=N;i++) {
                if (a[i]==0) continue;
                num++;
                if (num<=M) ans+=a[i];
                if (num>M) {
                    Min=min(Min,a[i]);
                }
            }
            ans+=Min-1; 
            printf("%lld
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    398. Random Pick Index
    382. Linked List Random Node
    645. Set Mismatch
    174. Dungeon Game
    264. Ugly Number II
    115. Distinct Subsequences
    372. Super Pow
    LeetCode 242 有效的字母异位词
    LeetCode 78 子集
    LeetCode 404 左叶子之和
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/12506144.html
Copyright © 2011-2022 走看看