0
点赞
收藏
分享

微信扫一扫

【蓝桥杯软件赛 零基础备赛20周】第3周——填空题

目录

A、星期计算 - BigInteger

B、山 - 暴力判断 + 字符串

C、字符统计 - 简单哈希

D、最少刷题数 - 排序 + 思维 + 二分 + 分情况讨论

(1)(错误)自写哈希表

(2)正解 

E、求阶乘 - 数学思维 + 二分

F、最大子矩阵 - (没过)暴力


A、星期计算 - BigInteger

import java.math.BigInteger;
import java.util.*;

public class abc {
	public static void main(String[] args)
	{
		Scanner sc=new Scanner(System.in);
		BigInteger n=new BigInteger("20");
		BigInteger res=new BigInteger("1");
		
		for(int i=0;i<22;i++) res=res.multiply(n);
		res=res.mod(new BigInteger("7"));
		
		System.out.print(res.intValue()+6);
	}
}

B、山 - 暴力判断 + 字符串

import java.math.BigInteger;
import java.util.*;

public class abc {
	public static void main(String[] args)
	{
		Scanner sc=new Scanner(System.in);
		long res=0;
		for(long i=2022;i<=2022222022;i++)
			if(ck(String.valueOf(i))) 
				res++;

		System.out.print(res);
	}
	public static boolean ck(String s)
	{
		boolean f=true;
		int n=s.length();
		for(int i=0;i<n/2;i++)
			if(s.charAt(i)!=s.charAt(n-1-i))
			{f=false;return f;}
		for(int i=1;i<=n/2;i++)
			if(s.charAt(i)<s.charAt(i-1)) 
			{
				f=false;break;
			}
		return f;
	}
	
}
import java.math.BigInteger;
import java.util.*;

public class abc {
	public static void main(String[] args)
	{
		Scanner sc=new Scanner(System.in);
		long res=0;
		for(long i=2022;i<=2022222022;i++)
			if(ck(String.valueOf(i))) 
				res++;

		System.out.print(res);
	}
	
	public static boolean ck(String s)
	{
		int n=s.length();
		StringBuilder ss=new StringBuilder(s);
		if(s.compareTo(ss.reverse().toString())!=0) return false;
		
		for(int i=1;i<=n/2;i++)
			if(s.charAt(i)<s.charAt(i-1)) 
				return false;
		return true;
	}
	
}

C、字符统计 - 简单哈希

import java.util.*;

public class abc {
	public static void main(String[] args)
	{
		Scanner sc=new Scanner(System.in);
		TreeMap<Character,Integer> mp=new TreeMap<>();
		String s=sc.next();
		int maxx=0;
		for(int i=0;i<s.length();i++)
		{
      char c=s.charAt(i);
			mp.put(c,mp.getOrDefault(c, 0)+1);
			if(mp.get(c)>maxx) maxx=mp.get(c);
		}
		String res=""; 
		for(Map.Entry<Character,Integer> x:mp.entrySet())
			if(x.getValue()==maxx) res+=x.getKey();
		
		System.out.print(res);
	}
	
}

D、最少刷题数 - 排序 + 思维 + 二分 + 分情况讨论

 

(1)(错误)自写哈希表

package demo_lanqiao;

import java.math.BigInteger;
import java.util.*;

public class abc {
	public static void main(String[] args)
	{
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		int[] a=new int[n],res=new int[n],b=new int[n];
		Map<Integer,Integer> mp=new HashMap<>();
		for(int i=0;i<n;i++)
		{
			a[i]=sc.nextInt();b[i]=a[i];
		}
		Arrays.sort(a);
		for(int x:a) System.out.print(x+" ");
		System.out.println();
		int mid=a[n/2];
		for(int i=0;i<n;i++)
		{
			int x=0;
			if(n%2==0) x=a[i]<mid? mid-a[i]:0;
			else if(n%2==1) x=a[i]<mid? mid+1-a[i]:0;
			mp.put(a[i],x);
		}
		for(int i=0;i<n;i++) res[i]=mp.get(b[i]);
		for(int x:res) 
			System.out.print(x+" ");
	}
	
}

(2)正解 

蓝桥杯官网的测评机同一个代码每一次测的百分比都不一样。。。。

蓝桥杯2022年第十三届省赛真题-最少刷题数 - C语言网

import java.math.BigInteger;
import java.util.*;

public class abc {
	public static void main(String[] args)
	{
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		int[] a=new int[n],t=new int[n];
		for(int i=0;i<n;i++)
		{
			a[i]=sc.nextInt();t[i]=a[i];
		}
		Arrays.sort(t);
		int mid=t[n/2];
		int min_m=findmin(t,mid),max_m=n-findmax(t,mid)-1;
		
		if(min_m<max_m) 
			for(int i=0;i<n;i++) 
				if(a[i]<=mid) System.out.print(mid-a[i]+1+" ");
				else System.out.print(0+" ");
		else if(min_m==max_m)
			for(int i=0;i<n;i++) 
				if(a[i]<mid) System.out.print(mid-a[i]+1+" ");
				else System.out.print(0+" ");
		else 
			for(int i=0;i<n;i++) 
				if(a[i]<mid) System.out.print(mid-a[i]+" ");
				else System.out.print(0+" ");

	}
	public static int findmax(int[] a,int tar)
	{
		int l=0,r=a.length-1;
		while(l<r)
		{
			int mid=l+r+1>>1;
			if(a[mid]<=tar) l=mid;
			else r=mid-1;
		}
		return l;
	}
	public static int findmin(int[] a,int tar)
	{
		int l=0,r=a.length-1;
		while(l<r)
		{
			int mid=l+r>>1;
			if(a[mid]>=tar) r=mid;
			else l=mid+1;
		}
		return r;
	}
	
}

E、求阶乘 - 数学思维 + 二分

import java.util.*;

public class abc {
	public static void main(String[] args)
	{
		Scanner sc=new Scanner(System.in);
		long k=sc.nextLong();
		long l=1,r=Long.MAX_VALUE-1;
		while(l<r)
		{
			long mid=l+r>>1;
			if(ck(mid)>=k) r=mid;
			else l=mid+1;
		}
		if(ck(r)!=k) System.out.print(-1);
		else System.out.print(r);
	}
	
	public static long ck(long n)
	{
		long res=0;
		while(n!=0)
		{
			res+=n/5;
			n/=5;
		}
		return res;
	}
	
}

F、最大子矩阵 - (没过)暴力

 

import java.util.*;

public class abc {
	public static void main(String[] args)
	{
		Scanner sc=new Scanner(System.in);
		int[][] g=new int[80][80];
		TreeMap<Integer,Integer> mp=new TreeMap<>();
		int n=sc.nextInt(),m=sc.nextInt();
		for(int i=0;i<n;i++)
			for(int j=0;j<m;j++) g[i][j]=sc.nextInt();
		int limit=sc.nextInt();
		int res=0;
		
		for(int up=0;up<n;up++)
			for(int dw=up;dw<n;dw++)
				for(int l=0;l<m;l++)
					for(int r=l;r<m;r++)
					{
						int max=0,min=Integer.MAX_VALUE;
						for(int i=up;i<=dw;i++)
							for(int j=l;j<=r;j++)
							{
								if(g[i][j]>max) max=g[i][j];
								if(g[i][j]<min) min=g[i][j];
							}
              
						if(max-min>=0&&max-min<=limit&&(dw-up+1)*(r-l+1)>res)
							{
								res=(dw-up+1)*(r-l+1);
								//System.out.println("["+max+","+min+"]"+up+" "+dw+" "+l+" "+r+" "+res);
							}
					}
		System.out.print(res);
	}
	
	
	
}
举报

相关推荐

0 条评论