当前位置:   article > 正文

蓝桥杯考前复习三

蓝桥杯考前复习三

1.约数个数

 由乘法原理可以得出:

  1. import java.util.*;
  2. public class Main{
  3. static int mod = (int)1e9 + 7;
  4. public static void main(String[] args){
  5. Map<Integer,Integer> map = new HashMap<>(); //创建一个哈希表
  6. Scanner scan = new Scanner(System.in);
  7. int n = scan.nextInt();
  8. while(n -- > 0){
  9. int x = scan.nextInt();
  10. //下面这里是运用了分解质因数的模板,
  11. for(int i = 2 ; i <= x / i ; i ++ ){
  12. while(x % i == 0){
  13. x /= i;
  14. // map.getOrDefault(i,0) 这个是获取对应i位置的values
  15. map.put(i,map.getOrDefault(i,0) + 1);
  16. }
  17. }
  18. if(x > 1) map.put(x,map.getOrDefault(x,0) + 1 );
  19. }
  20. long res = 1;
  21. //map.keySet()获取所有的key值,map.values()获取所有的values值,两种方法都可以
  22. for(int key : map.values()){
  23. res = res * (key + 1) % mod;
  24. }
  25. System.out.println(res);
  26. }
  27. }

2.堆优化版的Dijkstra

正好复习一下优先队列和存图方式;

3.贡献法求因数个数和;

题目来源于华北水利水电大学校赛:

7-10 兔丁兴旺的兔子家族 - 2024年第六届华北水利水电大学校赛-正式赛-复盘 (pintia.cn)

  1. import java.util.Scanner;
  2. public class Main {
  3. public static void main(String[] args) {
  4. Scanner sc=new Scanner(System.in);
  5. int n=sc.nextInt();
  6. long sum=0;
  7. for(int i=1;i<=n;i++) {
  8. sum+=n/i;
  9. }
  10. System.out.println(sum);
  11. }
  12. }

4.BFS--青蛙跳杯子

开心开心,一次就ac了,嘿嘿;

11.青蛙跳杯子 - 蓝桥云课 (lanqiao.cn)

  1. import java.util.HashMap;
  2. import java.util.LinkedList;
  3. import java.util.Queue;
  4. import java.util.Scanner;
  5. public class Main {
  6. static String start, end;
  7. static int[] dx = {-3,-2,-1,1,2,3 };
  8. static int n;
  9. public static void main(String[] args) {
  10. Scanner sc = new Scanner(System.in);
  11. start = sc.next();
  12. end = sc.next();
  13. n = start.length();
  14. bfs();
  15. }
  16. public static void bfs() {
  17. Queue<String>q=new LinkedList<String>();
  18. q.offer(start);
  19. HashMap<String, Integer>map=new HashMap<String, Integer>();
  20. map.put(start, 0);
  21. while(!q.isEmpty()) {
  22. String t=q.poll();
  23. if(t.equals(end)) {
  24. System.out.println(map.get(t));
  25. }
  26. int index=t.indexOf('*');
  27. for(int i=0;i<6;i++) {
  28. int x=index+dx[i];
  29. if(x<0||x>=n)continue;
  30. char[] T = t.toCharArray();
  31. char tmp=T[x];
  32. T[x]=T[index];
  33. T[index]=tmp;
  34. String str=new String(T);
  35. if(!map.containsKey(str)) {
  36. map.put(str, map.get(t)+1);
  37. }else continue;
  38. q.offer(str);
  39. }
  40. }
  41. }
  42. }

5.进制转换

1.Excel地址 - 蓝桥云课 (lanqiao.cn)

2.幸运数字 - 蓝桥云课 (lanqiao.cn)

  1. import java.util.Scanner;
  2. public class Excel地址 {
  3. public static void main(String[] args) {
  4. Scanner sc=new Scanner(System.in);
  5. int n=sc.nextInt();
  6. int []a=new int[26];
  7. int i=0;
  8. while(n!=0) {
  9. n--;
  10. a[i++]=n%26;
  11. n/=26;
  12. }
  13. for(int j=i-1;j>=0;j--) {
  14. System.out.print((char)(a[j]+65));
  15. }
  16. }
  17. }

6.二分答案---

5562. 最大生产 - AcWing题库

  1. import java.util.ArrayList;
  2. import java.util.Scanner;
  3. public class Main {
  4. static int N = 100010;
  5. static long[] a = new long[N];
  6. static long[] b = new long[N];
  7. static int n;
  8. static int k;
  9. static int INF = Integer.MAX_VALUE;
  10. public static void main(String[] args) {
  11. Scanner sc = new Scanner(System.in);
  12. n = sc.nextInt();
  13. k = sc.nextInt();
  14. for (int i = 1; i <= n; i++) {
  15. a[i] = sc.nextLong();
  16. }
  17. for (int i = 1; i <= n; i++) {
  18. b[i] = sc.nextLong();
  19. }
  20. long l = 0, r =(int)2e9;
  21. while (l < r) {
  22. long mid = (l + r + 1) / 2;
  23. if (check(mid)) {
  24. l = mid;
  25. } else
  26. r = mid - 1;
  27. }
  28. System.out.println(l); // 二分逻辑
  29. }
  30. public static boolean check(long x) {
  31. long m=k;
  32. for (int i = 1; i <= n; i++) {
  33. if (b[i] - x * a[i] < 0) {
  34. m-=(a[i]*x-b[i]);
  35. if(m<0)return false;
  36. }
  37. }
  38. return true;
  39. }
  40. }

7.FloodFill

5565. 残垣断壁 - AcWing题库

  1. import java.util.Scanner;
  2. public class Main {
  3. static int n,m;
  4. static int N=110;
  5. static int[][]g=new int[N][N];
  6. static boolean[][]st=new boolean[N][N];
  7. static int res=0;
  8. static int[] dx = { -1, 0, 1, 0 };
  9. static int[] dy = { 0, 1, 0, -1 };
  10. public static void main(String[] args) {
  11. Scanner sc=new Scanner(System.in);
  12. n=sc.nextInt();
  13. m=sc.nextInt();
  14. for(int i=0;i<n;i++) {
  15. String str = sc.next();
  16. for(int j=0;j<m;j++) {
  17. g[i][j]=str.charAt(j);
  18. }
  19. }
  20. for(int i=0;i<n;i++) {
  21. for(int j=0;j<m;j++) {
  22. if(g[i][j]=='B'&&!st[i][j]) {
  23. res++;
  24. dfs(i,j);
  25. }
  26. }
  27. }
  28. System.out.println(res);
  29. }
  30. public static void dfs(int a,int b) {
  31. st[a][b]=true;
  32. for(int i=0;i<4;i++) {
  33. int x=a+dx[i];
  34. int y=b+dy[i];
  35. if(x<0||x>=n||y<0||y>=m||st[x][y]||g[x][y]=='.')
  36. continue;
  37. dfs(x,y);
  38. }
  39. }
  40. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/390917
推荐阅读
相关标签
  

闽ICP备14008679号