2020蓝桥JavaB组题解(省赛)

总结:这就是蓝桥吗hhh

(填空先略…待更hhh)

F

题目大意:给出n个数,求最大值,最小值,平均值。

没手就行。

import java.io.*;
import java.util.*;

public class zbr01 
{
	public static void main(String[] args)
	{
		Scanner S=new Scanner(System.in);
		long mn=101,mx=0,tot=0;
		long n=S.nextLong();
		for(int i=1;i<=n;i++)
		{
			long x=S.nextLong();
			tot+=x; mn=Math.min(mn,x); mx=Math.max(mx,x);
		}
		System.out.println(mx);
		System.out.println(mn);
		double tmp=(double)tot/(double)n;
		System.out.println(String.format("%.2f",tmp));
	}
}

G

题目大意:给出长度为n的字符串,求出现次数最多的字符,有多个输出字典序最小的那个。

没手仍然行。

import java.io.*;
import java.util.*;

public class zbr01
{
	public static int cnt[]=new int [35];
	
	public static void main(String[] args)
	{
		Scanner S=new Scanner(System.in);
		String s=S.nextLine(); int n=s.length();
		for(int i=0;i<n;i++)
		{
			char q=s.charAt(i);
			cnt[q-'a']++;
		}
		int mx=0,f=0;
		for(int i=0;i<=25;i++) if(mx<cnt[i]) {mx=cnt[i]; f=i;}
		System.out.println((char)(f+'a'));
		System.out.println(mx);
	}
}

H

题目大意:给出n层的数字三角形,每次只能从上往下走,要求 a b s ( 往 左 走 − 往 右 走 ) < = 1 abs(往左走-往右走)<=1 abs()<=1的最大权值路径。
n < = 100 n<=100 n<=100

唯一的不同处就是abs的这个条件…观察下发现就是固定了终点而已…
然后经典胡乱dp如下即可:

dp[i][j]=dp[i-1][j-1]+a[i][j];
if(j!=i) dp[i][j]=Math.max(dp[i][j],dp[i-1][j]+a[i][j]);

Java代码:

import java.io.*;
import java.util.*;

public class zbr01
{
	public static int dp[][]=new int [105][105];
	public static int a[][]=new int [105][105];
	
	public static void main(String[] args)
	{
		Scanner S=new Scanner(System.in);
		int n=S.nextInt();
		for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) a[i][j]=S.nextInt();
		for(int i=1;i<=n;i++) for(int j=1;j<=i;j++)
		{
			dp[i][j]=dp[i-1][j-1]+a[i][j];
			if(j!=i) dp[i][j]=Math.max(dp[i][j],dp[i-1][j]+a[i][j]);
		}
		int ans=0;
		if(n%2==1) ans=dp[n][(n+1)/2];
		else ans=Math.max(dp[n][n/2],dp[n][n/2+1]);
		System.out.println(ans);
	}
}

I

题目大意:给出长度为 n n n的字符串,问在其 n 2 n^2 n2个子串中,每个子串中出现的字符个数和。
n < = 1 e 5 n<=1e5 n<=1e5

考虑对每个字符计算贡献…那么就记录自己前面第一个相同字符的位置,以及现在自己位置就可…

答案统计如下 a n s + = ( n − i ) ∗ ( i − p r e [ p − ′ a ′ ] ) ; ans+=(n-i)*(i-pre[p-'a']); ans+=(ni)(ipre[pa]);

Java代码:

import java.io.*;
import java.util.*;

public class zbr01
{
	public static long pre[]=new long [100005];
	public static long ans=0;
	
	public static void main(String[] args)
	{
		Scanner S=new Scanner(System.in);
		String s=S.nextLine(); int n=s.length();
		for(int i=0;i<=25;i++) pre[i]=-1;
		for(int i=0;i<n;i++)
		{
			char p=s.charAt(i);
			ans+=(n-i)*(i-pre[p-'a']); pre[p-'a']=i;
		}
		System.out.println(ans);
	}
}

J

语文题,看不懂,扔了扔了hhh(可能会填)

你可能感兴趣的:(简单,蓝桥,算法)