码迷,mamicode.com
首页 > 数据库 > 详细

Codeforces MemSQL.Round.1

时间:2017-10-25 19:43:42      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:int()   nbsp   text   int   double   []   for   大数   one   

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

 

 

 

Codeforces MemSQL.Round.1

标签:int()   nbsp   text   int   double   []   for   大数   one   

原文地址:http://www.cnblogs.com/love-fromAtoZ/p/7730775.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!