Codeforces MemSQL.Round.1
Posted 薛定谔的Submit
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }
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 }
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 }
以上是关于Codeforces MemSQL.Round.1的主要内容,如果未能解决你的问题,请参考以下文章