Codeforces 494Div3(ABCDJava编写)
【摘要】 Codeforces 494 div3 (ABCD)
从暑假开始做cf,感觉cf的题目很好,div3难度正好也挺适合我这种垃圾的。 题目链接 A:要找分割的最小次数,其实就是求同一个元素出现的最大次数。用hashmap即可。
package codeforces494;
import java.util.HashMap;
import java.util.Map;...
Codeforces 494 div3 (ABCD)
从暑假开始做cf,感觉cf的题目很好,div3难度正好也挺适合我这种垃圾的。 题目链接
A:要找分割的最小次数,其实就是求同一个元素出现的最大次数。用hashmap即可。
package codeforces494;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class codeA {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
Map <Integer,Integer>map=new HashMap();
int max=1;
for(int i=0;i<n;i++)
{ int j=sc.nextInt(); if(map.containsKey(j)) {map.put(j, map.get(j)+1);if(map.get(j)>max) {max=map.get(j);}} else { map.put(j, 1); }
}
System.out.println(max);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
B:要求写出一种满足要求数量的01不同的策略。贪心,分奇偶讨论。一个为整,一个插入就行。
package codeforces494;
import java.util.Scanner;
public class codeB {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();//a个0
int b=sc.nextInt();
int x=sc.nextInt();//x个
StringBuffer bu=new StringBuffer("");
for(int i=0;i<a;i++)
{ bu.append("0");
}
String s=bu.toString();
StringBuffer bu2=new StringBuffer("");
for(int i=0;i<b;i++)
{ bu2.append("1");
}
String s2=bu2.toString();
if(s.length()<s2.length())
{ String team=s; s=s2; s2=team; a=b;
}
if(x%2==0)//偶数
{ int team=x; if(x>2) { while(team>2) { s=s.substring(0,a-1-(x-team)/2)+s2.substring(0,1)+s.substring(a-1-(x-team)/2); s2=s2.substring(1); team=team-2; } s=s.substring(0,a-1-(x-team)/2)+s2+s.substring(a-1-(x-team)/2);} else { s=s.substring(0,1)+s2+s.substring(1); }
}
else
{ int team=x; while(team>1) { s=s.substring(0,a-1-(x-team)/2)+s2.substring(0,1)+s.substring(a-1-(x-team)/2); s2=s2.substring(1); team=team-2; } s+=s2;
}
System.out.println(s);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
C:求子数列的最大平均值,用dp。
package codeforces494;
import java.util.Scanner;
public class codeC {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
double max=0.0; int n=sc.nextInt();//总个数 int k=sc.nextInt(); int a[]=new int[(int) n]; for(int i=0;i<n;i++) { a[i]=sc.nextInt(); } int dp[][]=new int [n+1][n];//长度为k,第n个数截至的总和/ //计算长度为1到长度为k的 for(int i=0;i<n;i++) {dp[1][i]=a[i];} for(int i=2;i<n+1;i++) { for(int j=i-1;j<n;j++) {dp[i][j]=dp[i-1][j-1]+a[j]; if(i>=k) { if((double)dp[i][j]/i>max) { max=(double)dp[i][j]/i; } } } } if(k==1) { for(int i=0;i<n;i++) { if(a[i]>max) {max=a[i];} } }
// for(int i=0;i<n;i++)
// {
// System.out.print(dp[4][i]+" ");
// } System.out.println(max);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
D:
package codeforces494;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.HashMap;
import java.util.Map;
public class codeD {
public static void main(String[] args) throws IOException {
StreamTokenizer in=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
Map<Long,Integer> map=new HashMap();
in.nextToken();
int n=(int)in.nval;in.nextToken();
int q=(int)in.nval; long value[]=new long[33];//价值输入 int number[]=new int[33]; value[0]=1;map.put((long) 1, 0); for(int i=1;i<33;i++) { value[i]=2*value[i-1]; map.put( value[i], i); //System.out.println(value[i]); } for(int i=0;i<n;i++)
{ in.nextToken(); long input=(long)in.nval;int getint=map.get(input); number[getint]++;
}
int t=31;int count=0;
while(q-->0)
{ in.nextToken(); int sea=(int)in.nval; count=0; for(int i=t;i>=0;i--) { int num=number[i]; if(sea<value[i]||num==0) {continue;} else if(sea>=value[i]&&num>0) { int numb1=(int) (sea/value[i]); numb1=numb1>num?num:numb1; sea-=value[i]*numb1; count+=numb1; } else if(sea==0) {break;} } if(sea==0) {System.out.println(count);} else {System.out.println(-1);} }
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
文章来源: bigsai.blog.csdn.net,作者:Big sai,版权归原作者所有,如需转载,请联系作者。
原文链接:bigsai.blog.csdn.net/article/details/81321932
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)