2020第十一届蓝桥杯JavaB组省赛总结

   日期:2020-10-18     浏览:224    评论:0    
核心提示:一道填空和编程写错了,另外大题的类名没写Main,再见了。文章目录试题 A: 门牌制作试题 B: 寻找 2020试题 C: 蛇形填数试题 D: 七段码试题 E: 排序试题 F: 成绩分析试题 G: 单词分析试题 H: 数字三角形试题 I: 子串分值和试题 J: 装饰珠试题 A: 门牌制作思路 :624import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import ja

大题的类名没写Main,再见了。

文章目录

  • 试题 A: 门牌制作
  • 试题 B: 寻找 2020
  • 试题 C: 蛇形填数
  • 试题 D: 七段码
  • 试题 E: 排序
  • 试题 F: 成绩分析
  • 试题 G: 单词分析
  • 试题 H: 数字三角形
  • 试题 I: 子串分值和
  • 试题 J: 装饰珠

试题 A: 门牌制作

思路 :624

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
 
  
public class Main { 
    static int N = 100000 * 4 + 5;
    static int M = 1000 + 5;
    static int mod = 1000000009;
    static Scanner cin = new Scanner(System.in);
     
    static int ans = 0;
    
    public static void main(String[] args) { 
    	
    	for(int i = 1; i <= 2020; i++) { 
    		check(i);
    	}
    	
		System.out.println(ans);
	}

	private static void check(int i) { 
		while(i > 0) { 
			if(i % 10 == 2) ++ans;
			i /= 10;
		}
	}
}



试题 B: 寻找 2020

思路: 16520

代码:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
 
  
public class Main { 
    static int N = 100000 * 4 + 5;
    static int M = 1000 + 5;
    static int mod = 1000000009;
    static Scanner cin = new Scanner(System.in);
     
    static int ans = 0, n, m;
    static char c[][] = new char[M][M];
    
    public static void main(String[] args) { 
    	while(cin.hasNext()) { 
    		String s = cin.next();
    		m = s.length();
    		c[n++] = s.toCharArray();
    	}
    	for(int i = 0; i < n; i++)
    		for(int j = 0; j < m; j++)
    			if(c[i][j] == '2')
    				check(i, j);
    	
	}

	private static void check(int i, int j) { 
		if(i + 3 < n)
			if(c[i+1][j] == '0' && c[i+2][j] == '2' && c[i+3][j] == '0')
				++ans;
		if(j + 3 < m)
			if(c[i][j+1] == '0' && c[i][j+2] == '2' && c[i][j+3] == '0')
				++ans;
		if(i + 3 < n && j + 3 < n)
			if(c[i+1][j+1] == '0' && c[i+2][j+2] == '2' && c[i+3][j+3] == '0')
				++ans;
	}
}

试题 C: 蛇形填数

思路: 761

代码:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
 
  
public class Main { 
    static int N = 100000 * 4 + 5;
    static int M = 1000 + 5;
    static int mod = 1000000009;
    static Scanner cin = new Scanner(System.in);
     
    static int ans = 0, n, m;
    static int c[][] = new int[M][M];
    
    public static void main(String[] args) { 
    	check(1, 1, 1, 1);
    	System.out.println(c[20][20]);
	}

	private static void check(int i, int j, int w, int f) { 
		c[i][j] = w;
		if(i > 50 || j > 50) return;
		if(i == j && i == 1) check(i, j+1, w+1, -f);
		else if(f == -1) { 
			if(j == 1) check(i+1, j, w+1, -f);
			else check(i+1, j-1, w+1, f);
		}
		else if(f == 1) { 
			if(i == 1) check(i, j+1, w+1, -f);
			else check(i-1, j+1, w+1, f);
		}
		
	}
}

试题 D: 七段码

思路: 80

  1. 按边建图dfs保证联通,二进制枚举判重。

代码:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
 
  
public class Main { 
    static int N = 100000 * 4 + 5;
    static int M = 1000 + 5;
    static int mod = 1000000009;
    static Scanner cin = new Scanner(System.in);
     
    static int ans = 0, n, m;
    static ArrayList<Integer> g[] = new ArrayList[N];
    static boolean vis[] = new boolean[N];
    static boolean dp[] = new boolean[N];
    static int a[] = new int[1<<8];
    
    public static void main(String[] args) { 
    	for(int i = 1; i <= 7; i++)
    		g[i] = new ArrayList<Integer>();
    	add(1, 2); add(1, 6); add(2, 7); add(2, 3); add(3, 4);
    	add(4, 5); add(5, 6); add(5, 7); add(6, 7); add(3, 7);
    	for(int i = 1; i <= 7; i++) { 
    		vis[i] = true;
    		dfs(i , 1);
    		vis[i] = false;
    	}
    	System.out.println(ans);
	}

	private static void dfs(int u, int k) { 
		a[k] = u;
		check(k);
		for(int i = 1; i <= k; i++) { 
			for(int v: g[a[i]]) { 
				if(vis[v]) continue;
				vis[v] = true;
				dfs(v, k + 1);
				vis[v] = false;
			}
		}
	}

	private static void check(int k) { 
		int res = 0;
		for(int i = 1; i <= k; i++)
			res += (1<<a[i]);
		if(dp[res]) return;
		dp[res]  = true;
		ans++;
	}

	private static void add(int i, int j) { 
		g[i].add(j); g[j].add(i);
	}

	

	
}

试题 E: 排序

思路: 其实就是逆序数,算一下就可以,但是考试的时候脑子抽了一直dfs。

代码:

试题 F: 成绩分析

思路:

  1. 注意一下平均分的四舍五入就可以了。

代码:

试题 G: 单词分析

思路:

  1. 用个HashMap<Character,Integer>计数即可。

代码:

试题 H: 数字三角形

思路:

  1. d p [ i ] [ j ] + = m a x ( d p [ i − 1 ] [ j − 1 ] , d p [ i − 1 ] [ j ] ) dp[i][j]+=max(dp[i-1][j-1],dp[i-1][j]) dp[i][j]+=max(dp[i1][j1],dp[i1][j])
  2. n为奇数时答案为 d p [ n ] [ ( n + 1 ) / 2 ] dp[n][(n+1)/2] dp[n][(n+1)/2],偶数则是 m a x ( d p [ n ] [ n / 2 ] , d p [ n ] [ n / 2 + 1 ] ) max(dp[n][n/2],dp[n][n/2+1]) max(dp[n][n/2],dp[n][n/2+1])

试题 I: 子串分值和

思路:

  1. 开26个数组保存每个字母出现的下标
  2. 然后根据每个字母出现的下标差来计算当前字母对所有区间的答案贡献
  3. O ( 26 n ) 枚 举 即 可 O(26n)枚举即可 O(26n)

试题 J: 装饰珠

思路: 不会

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服