Codeforces 494Div3(ABCDJava编写)

举报
bigsai 发表于 2021/02/02 22:48:34 2021/02/02
【摘要】 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。