• CSUOJ2257: Intergalactic Bidding


    题意:n个人竞价拍卖宝石,宝石价值s块钱,求哪些人出的钱加起来刚好是s

    题解:

    根据题意,注意当前人出的钱至少是全场人出的最高价钱的两倍(关键条件)

    那我们就可以对每个人出的钱排序,从大的开始取,假设当前为x,如果s>=x,

    一定要取x,因为如果不取x我们就得取比x小的那些数,但是就算把比x小的

    数全加起来都不比x大,所以x必须被取走!

    举例:2 5 13 28 50,s=57,发现50小于等于57,取之,s=7,然后28>s,

    不取,然后13也不能取,最后把5和2取完,s=0

    因为钱数很大,这里用JAVA里的BigInteger类处理。

    一开始想着用结构体存人名字和钱,然后重载运算符再排序,

    结果发现JAVA不支持重载运算符。。。

    然后发现每个人的钱数肯定不同,便祭出了map;

    后来又发现还他妈不支持biginteger排序。。。

    好吧,大不了我手写个排序咯

     1 //package 实验;
     2 import java.math.BigInteger;
     3 import java.util.Scanner;
     4 import java.util.*;
     5 import java.io.*;
     6 
     7 public class Main {
     8     public static void main(String [] args){
     9         BigInteger t = BigInteger.valueOf(1);
    10         Map<BigInteger, String> mp = new HashMap<BigInteger, String>();
    11         BigInteger a[]=new BigInteger[1005];
    12         Scanner cin = new Scanner(System.in);
    13         int n=cin.nextInt();
    14         BigInteger k=cin.nextBigInteger();
    15         String s="";
    16         for(int i=1;i<=n;i++) {
    17             s=cin.next();
    18             a[i]=cin.nextBigInteger();
    19             mp.put(a[i], s);
    20         }
    21         for(int i=n;i>=1;i--) {
    22             for(int j=1;j<i;j++) {
    23                 if(a[j].compareTo(a[j+1])==1) {
    24                     t=a[j];
    25                     a[j]=a[j+1];
    26                     a[j+1]=t;
    27                 }
    28             }
    29         }
    30         String s1[]=new String[1005];
    31         int cnt=0;
    32         for(int i=n;i>=1;i--) {
    33             if(k.compareTo(a[i])>=0) {
    34                 k=k.subtract(a[i]);
    35                 s1[++cnt]=mp.get(a[i]);
    36                 
    37             }
    38         }
    39         if(k.equals(BigInteger.ZERO)) {
    40             System.out.println(cnt);
    41             for(int i=1;i<=cnt;i++) {
    42                 System.out.println(s1[i]);
    43             }
    44         }
    45         else System.out.println(0);
    46     }
    47 }
  • 相关阅读:
    Spring Cloud-Eureka的一些概念
    Spring Cloud-Eureka的基本架构
    Spring Cloud-分布式事务
    Spring Cloud-熔断机制
    SpringBoot下载文件
    redis 指定db库导入导出数据
    python基础:重新认识装饰器
    源码解析:django的CSRF认证
    源码解析:数据批量导入bukl_crete()原理
    剑指 Offer 13. 机器人的运动范围
  • 原文地址:https://www.cnblogs.com/ccsu-kid/p/10526132.html
Copyright © 2020-2023  润新知