• Codeforces MemSQL.Round.1


    A - Declined Finalists

    题目大意:

      有1e6个人,序号从1到1e6,现在要邀请前25个人组成队伍,但是被选中的人可能会推掉邀请,如果有人没去,就要从第26个人开始按序号补满25个队员。你现在已知有K个人的序号,求出最少有多少个人推掉了邀请。

      输入一行一个整数:代表已知的K个人(最多25人)。

      输入一行K 个整数:代表已知K个人的序号。

      输出一行一个整数:代表最少有多少人推掉了邀请。

      样例输入:25

           2 3 4 5 6 7 8 9 10 11 12 14 15 16 17 18 19 20 21 22 23 24 25 26 28

           5

           16 23 8 15 4

           3

           14 15 92

      样例输出:3  

           0  

           67

    解题思路:

      此题题干较为不好理解,但是思路很简单:sort后看最大数。

      如果大于25,结果就是最大数和25的差。

      小于等于25,结果均为0。

    A C 代码:

     1 import java.util.*;
     2 
     3 public class Main{
     4     public static void main(String[] args){
     5         Scanner sc = new Scanner(System.in);
     6         while(sc.hasNext()){
     7             int n = sc.nextInt();
     8             int m[] = new int[n];
     9             for(int i = 0;i < n;i ++){
    10                 m[i] = sc.nextInt();
    11             }
    12             Arrays.sort(m);
    13             if(m[n - 1] > 25){System.out.println(m[n - 1] - 25);}
    14             else{System.out.println("0");}
    15         }
    16     }
    17 }
    View Code

    B - Lazy Security Guard

    题目大意:

      求解n个边长为单位长度的正方形拼成的图形的最短周长。

      输入一行一个整数:n,代表给你n个小正方形。

      输出一行一个整数:代表得出的最小周长。

    解题思路:

      一个简单的公式,2 * ((ceil)(2 * sqrt(n)))。

      或者,(ceil)(4 * sqrt(n)) 然后判断,奇数加一,偶数不变。

    A C 代码:

     1 import java.util.*;
     2 
     3 public class Main{
     4     public static void main(String[] args){
     5         Scanner sc = new Scanner(System.in);
     6         while(sc.hasNext()){
     7             int n = sc.nextInt();
     8             double p = 2 * Math.sqrt(n);
     9             int pp = (int)Math.ceil(p);
    10             System.out.println(2 * pp);
    11         }
    12     }
    13 }
    View Code

      C - Pie Rules

    题目大意:

      两个人(A和B)按照以下规则分n堆糖,两个人都按照最优策略。

      从B开始,如果B拿走当前堆的糖,那么下一堆轮到A选择要不要。

      如果B不要这堆糖,那么就将这堆糖给A,自己继续选择下一堆要不要。

      直到所有的糖都分完。求解两人各获得多少糖。

      输入一行一个整数:N,代表N堆糖果(N ∈ [1,50])。

      输出一行N 个整数:每个整数代表一堆糖的数量。从头到尾按顺序分糖。

      输出一行两个整数:分别代表A和B获得了多少糖。

      样例输入:3         5

           141 592 653    10 21 10 21 10

      样例输出:653 733      31 41

    解题思路:

      一道DP题目。dp[i]代表分到当前堆时,当前持有分配权的人最多能得到多少苹果。sum[i]代表当前堆时一共分配了多少苹果。

      最开始一直正向分配,始终出现错误。。。

      然后才知道应该反向去分配。。。

      因为正向分配的时候,并不知道谁持有分配权。

    A C 代码:

     

     1 import java.util.*;
     2 
     3 public class Main{
     4     public static void main(String[] args){
     5         Scanner sc = new Scanner(System.in);
     6         while(sc.hasNext()){
     7             int n = sc.nextInt();
     8             int pie[] = new int[n + 1];
     9             int dp[] = new int[n + 1];
    10             int sum[] = new int[n + 1];
    11             for(int i = n;i >= 1;i --){
    12                 pie[i] = sc.nextInt();
    13             }
    14             for(int i = 1;i <= n;i ++){
    15                 sum[i] = sum[i - 1] + pie[i];
    16             }
    17             /*
    18             System.out.print("sum[] = ");
    19             for(int i = 1;i <= n;i ++){
    20                 System.out.print(sum[i] + " ");
    21             }System.out.println();
    22             */
    23             for(int i = 1;i <= n;i ++){
    24                 dp[i] = Math.max(dp[i - 1],sum[i] - dp[i - 1]);
    25             }
    26             /*
    27             System.out.print("dp[] = ");
    28             for(int i = 1;i <= n;i ++){
    29                 System.out.print(dp[i] + " ");
    30             }System.out.println();
    31             */
    32             System.out.println((sum[n] - dp[n]) + " " + dp[n]);
    33         }
    34     }
    35 }
    View Code

     

     

  • 相关阅读:
    if语句
    操作列表
    列表
    数据类型(不全)
    windows安装mysql
    hadr启动报错码
    db2主备hadr部署
    java--遍历字符个数
    java--装饰类
    java--继承&接口
  • 原文地址:https://www.cnblogs.com/love-fromAtoZ/p/7730775.html
Copyright © 2020-2023  润新知