• 蓝桥杯13届JAVA A组 国赛


    ​​​​​​​

    1. package 蓝桥杯国赛;
    2. // 贪心选个数最少的进行摆
    3. // 2:1 ,3:1, 4:1,5 : 3,6:3,7:1
    4. // 选 1,7,4,2,3,5,9
    5. // 然后都选满10个
    6. public class 火彩棒数字 {
    7. public static void main(String[] args)
    8. {
    9. System.out.print("9999999999777777777755555555554444444444333333333322222222221111111111");
    10. }
    11. }

    1. package 蓝桥杯国赛;
    2. import java.util.Scanner;
    3. //1:无需package
    4. //2: 类名必须Main, 不可修改
    5. //C28 * f[i] 错排公式
    6. //f[i] = (i - 1) (f[i - 1] + f[i - 2])
    7. public class 小蓝与钥匙 {
    8. static int N = 100;
    9. static long[] f = new long[N];
    10. public static void main(String[] args) {
    11. long ans = 1;
    12. f[2] = 1;
    13. for(int i = 3;i < N;i++)
    14. f[i] = (i - 1) * (f[i - 1] + f[i - 2]);
    15. for(long i = 0;i < 14;i++)
    16. ans = ans * (28 - i) / (i + 1);
    17. System.out.println(ans * f[14]);
    18. }
    19. }

     

    1. package 蓝桥杯国赛;
    2. import java.util.Scanner;
    3. public class 内存空间 {
    4. public static void main(String[] args) {
    5. Scanner in=new Scanner(System.in);
    6. int t=in.nextInt();
    7. long sum=0;
    8. in.nextLine();
    9. while(t-->0){
    10. String []s=in.nextLine().split(" ");
    11. if(s[0].equals("int")){
    12. String[]s1=s[1].split(",");
    13. sum+=4*s1.length;
    14. }else if(s[0].equals("long")){
    15. String[]s1=s[1].split(",");
    16. sum+=8*s1.length;
    17. }else if(s[0].equals("String")){
    18. String[]s1=s[1].split(",");
    19. for(String ss:s1){
    20. int index=ss.indexOf("\"");
    21. int tmp=ss.indexOf("\"",index+1)-index-1;
    22. sum+=tmp;
    23. }
    24. }else if(s[0].equals("int[]")) {
    25. for(int i=2;i
    26. int l=s[i].indexOf("[");
    27. int r=s[i].indexOf("]");
    28. int tmp=Integer.parseInt(s[i].substring(l+1,r));
    29. sum+=4*tmp;
    30. }
    31. }else if(s[0].equals("long[]")) {
    32. for(int i=2;i
    33. int l=s[i].indexOf("[");
    34. int r=s[i].indexOf("]");
    35. int tmp=Integer.parseInt(s[i].substring(l+1,r));
    36. sum+=8*tmp;
    37. }
    38. }
    39. }
    40. long gb,mb,kb,k;
    41. gb=sum/1024/1024/1024;
    42. mb=sum%(1024*1024*1024)/1024/1024;
    43. kb=sum%(1024*1024)/1024;
    44. k=sum%1024;
    45. String res="";
    46. if (gb != 0)
    47. res += gb + "GB";
    48. if (mb != 0)
    49. res += mb + "MB";
    50. if (kb != 0)
    51. res += kb + "KB";
    52. if (k != 0)
    53. res += k + "B";
    54. System.out.println(res);
    55. }
    56. }

     

    1. package 蓝桥杯国赛;
    2. import java.util.Scanner;
    3. // 由之前算出当n > 30 f[] > 1e6
    4. public class 斐波那契数组 {
    5. static int N = 100100;
    6. static int[] f = new int[N],a = new int[N];
    7. public static void main(String[] args)
    8. {
    9. f[1] = 1;f[2] = 1;
    10. for(int i = 3;i <= 30;i++)
    11. f[i] = f[i - 1] + f[i - 2];
    12. Scanner scanner = new Scanner(System.in);
    13. int n = scanner.nextInt();
    14. for(int i = 1;i <= n;i++)
    15. a[i] = scanner.nextInt();
    16. int ans = 0,m = n;
    17. if(n > 30) n = 30;
    18. for(int i = 1;i <= n;i++) {
    19. int cnt = 0;
    20. if(a[i] % f[i] == 0) {
    21. int t = a[i] / f[i];
    22. for(int j = 1;j <= n;j++)
    23. if(f[j] * t == a[j]) cnt++;
    24. ans = Math.max(ans,cnt);
    25. }
    26. }
    27. System.out.print(m - ans);
    28. }
    29. }

     

    1. package 蓝桥杯国赛;
    2. import java.util.*;
    3. // 特殊的dijkstra
    4. // dijkstra是每个选取最小的,如果弹出的节点已径扩展过了,就continue
    5. // 然后扩展每个点计算经过该点的最短路径,如果小于就原最短路径,则入堆
    6. // 这里特殊的边权值是动态变化的
    7. // tt < g 则当前路口为绿灯
    8. // g < tt < g + d 则当前路口为黄灯且下一个灯为红灯
    9. // g + d < tt < g + d + r 则当前路口为红灯
    10. // g + d + r < tt < g + 2d + r 则当前路口为黄灯且下一个灯为绿灯
    11. public class 交通信号 {
    12. static final int N = 1000010, M = 4 * N;
    13. static int[] h = new int[N], e = new int[M], ne = new int[M], g = new int[M], r = new int[M], d = new int[M], f = new int[M];
    14. static long[] times = new long[N];
    15. static int idx = 0;
    16. static void add(int a, int b, int green, int red, int dist, int flag) {
    17. e[idx] = b; g[idx] = green; r[idx] = red;
    18. d[idx] = dist; ne[idx] = h[a]; f[idx] = flag; h[a] = idx++;
    19. }
    20. static long dijkstra(int n, int m, int s, int t) {
    21. Arrays.fill(times, Long.MAX_VALUE);
    22. times[s] = 0;
    23. PriorityQueue pq = new PriorityQueue<>((a,b) -> Long.compare(a.dist,b.dist));
    24. pq.offer(new Pair(s, 0));
    25. while (!pq.isEmpty()) {
    26. Pair pair = pq.poll();
    27. int u = pair.node;
    28. long dist = pair.dist;
    29. if (dist > times[u]) continue;
    30. for (int i = h[u]; i != -1; i = ne[i]) {
    31. int j = e[i];
    32. long gr = g[i], re = r[i], di = d[i], fl = f[i];
    33. long tot = gr + re + 2 * di;
    34. long curt = dist % tot;
    35. if (fl == 1) curt = curt >= gr ? tot - curt : 0;
    36. else curt = curt >= gr + di && curt < gr + di + re ? 0 : curt < gr + di ? gr + di - curt : tot - curt + gr + di;
    37. long newDist = dist + curt + di;
    38. if (newDist < times[j]) {
    39. times[j] = newDist;
    40. pq.offer(new Pair(j, newDist));
    41. }
    42. }
    43. }
    44. return times[t] > Long.MAX_VALUE / 2 ? -1 : times[t];
    45. }
    46. public static void main(String[] args) {
    47. Scanner scanner = new Scanner(System.in);
    48. int n = scanner.nextInt(),m = scanner.nextInt();
    49. int s = scanner.nextInt(),t = scanner.nextInt();
    50. Arrays.fill(h, -1);
    51. for (int i = 0; i < m; i++) {
    52. int a = scanner.nextInt(), b = scanner.nextInt();
    53. int green = scanner.nextInt(),red = scanner.nextInt();
    54. int dist = scanner.nextInt();
    55. add(a, b, green, red, dist, 1); add(b, a, green, red, dist, 0);
    56. }
    57. System.out.println(dijkstra(n, m, s, t));
    58. }
    59. static class Pair {
    60. private final int node;
    61. private final long dist;
    62. public Pair(int node, long dist) {
    63. this.node = node;
    64. this.dist = dist;
    65. }
    66. }
    67. }

    1. import java.util.*;
    2. public class Main {
    3. static final int MAXV = 10;
    4. static final int mod = 1000000007;
    5. static int solve(int[] B, int N) {
    6. int[][][] f = new int[2][MAXV][MAXV];
    7. int cur = 0, ans = 0;
    8. for (int i0 = 0; i0 < MAXV; ++i0) {
    9. for (int i1 = 0; i1 < MAXV; ++i1) {
    10. cur = 0;
    11. Arrays.stream(f[cur]).forEach(arr -> Arrays.fill(arr, 0));
    12. f[cur][i0][i1] = 1;
    13. for (int i = 2; i < N; i++) {
    14. cur ^= 1;
    15. Arrays.stream(f[cur]).forEach(arr -> Arrays.fill(arr, 0));
    16. for (int A0 = 0, prev = cur ^ 1; A0 < MAXV; ++A0) {
    17. for (int A1 = 0; A1 < MAXV; ++A1) {
    18. if (f[prev][A0][A1] == 0) continue;
    19. for (int A2 = 0; A2 < MAXV; ++A2) {
    20. if (Math.max(Math.max(A0, A1), A2) != B[i - 1]) continue;
    21. if (i == N - 1) {
    22. if (Math.max(Math.max(A1, A2), i0) != B[i] || Math.max(Math.max(i0, i1), A2) != B[0]) continue;
    23. }
    24. f[cur][A1][A2] += f[cur ^ 1][A0][A1];
    25. f[cur][A1][A2] %= mod;
    26. }
    27. }
    28. }
    29. }
    30. for (int A0 = 0; A0 < MAXV; ++A0) {
    31. for (int A1 = 0; A1 < MAXV; ++A1) {
    32. ans += f[cur][A0][A1];
    33. ans %= mod;
    34. }
    35. }
    36. }
    37. }
    38. return ans;
    39. }
    40. public static void main(String[] args) {
    41. Scanner scanner = new Scanner(System.in);
    42. int N = scanner.nextInt();
    43. int[] B = new int[N];
    44. for (int i = 0; i < N; ++i) {
    45. B[i] = scanner.nextInt();
    46. }
    47. System.out.println(solve(B, N));
    48. }
    49. }

    1. package 蓝桥杯国赛;
    2. import java.util.*;
    3. //本题使用bigInteger会超时
    4. //可以利用位运算找规律
    5. //1
    6. //121
    7. //12321
    8. //1234321
    9. //123454321
    10. //12345654321
    11. //一共有2n-1位,
    12. // 当i <= n 时
    13. // 从右往左第i行,这一行有n - i + 1个 i,上面是i - 2,i - 4,.... 2(或1)
    14. // 这一位是[(n - i + 1) * i + k] k = i/2*(i - 2)/2 或 k = (i-1) / 2*(i - 1)/2
    15. // 当 i > n 时
    16. // 末尾为奇数时对1到末尾相加,为偶数时0 到 n 相加
    17. public class 六六大顺 {
    18. public static void main(String[] args)
    19. {
    20. Scanner scanner = new Scanner(System.in);
    21. long n = scanner.nextLong();
    22. StringBuilder x = new StringBuilder();
    23. long carry = 0, t;
    24. for (long i = 1; i <= n; i++) {
    25. t = (n - i + 1) * i;
    26. if (i % 2 == 0) t += i * (i - 2) / 4;
    27. else t += (i - 1) * (i - 1) / 4;
    28. t = t * 36 + carry;
    29. x.append(t % 10);
    30. carry = t / 10;
    31. }
    32. for (long i = n + 1; i < 2 * n; i++) {
    33. long last_value = 2 * n - i;
    34. long cnt = (last_value + 1) / 2;
    35. if (i % 2 == 0) t = (last_value + 2) * cnt / 2;
    36. else t = (last_value + 1) * cnt / 2;
    37. t = t * 36 + carry;
    38. x.append(t % 10);
    39. carry = t / 10;
    40. }
    41. x.append(carry);
    42. System.out.println(x.reverse().toString());
    43. }
    44. }

     

    1. package 蓝桥杯国赛;
    2. import java.util.Scanner;
    3. //x的上一层的取值范围y 为 12 ~ 22,且为合数
    4. //当y 为 12 :9 ~ 12
    5. //当y 为 14 :14 - 7 + 1 = 8
    6. //当y 为 15 :15 - 5 + 1 = 9
    7. // ····
    8. // 第一步求x 最大素数 z(如果是质数,就-1)
    9. // y的取之范围为 (x - z + 1, x ),y为合数
    10. // 然后在求区间中➖最大素数 + 1 最大的数
    11. public class 选素数 {
    12. static boolean is_prime(int n)
    13. {
    14. if(n <= 1) return false;
    15. for(int i = 2;i <= n / i;i++)
    16. if(n % i == 0) return false;
    17. return true;
    18. }
    19. static int lpf(int n)
    20. {
    21. int ans = 2;
    22. for(int i = 2; i <= n/i;i++)
    23. {
    24. while(n % i == 0)
    25. {
    26. ans = i;
    27. n /= i;
    28. }
    29. }
    30. return ans;
    31. }
    32. public static void main(String[] args)
    33. {
    34. Scanner scanner = new Scanner(System.in);
    35. int x = scanner.nextInt();
    36. if(is_prime(x)) {
    37. System.out.println(-1);
    38. }else {
    39. int z = lpf(x);
    40. int l = x - z + 1;
    41. int ans = (int)2e6;
    42. for(int i = l;i <= x;i++) {
    43. if(is_prime(i)) continue;
    44. ans = Math.min(ans,i - lpf(i) + 1);
    45. }
    46. System.out.println(ans);
    47. }
    48. }
    49. }

    国赛ac难度是大于省赛的,最后俩题放弃了

  • 相关阅读:
    牛客刷题——剑指offer(第7期)
    Java --- Spring6前的程序问题
    关于序列化协议,你需要知道的一些内容(2)
    C语言 二叉树
    【数据库】mysql索引
    Acwing-Hankson的趣味题-(dfs求因子+质数,因子,数字大小的各种关系的整理)
    git远端协同开发、解决冲突、分支合并、gitlab使用、远程仓库回滚、为开源项目贡献代码、git工作流,git pull和git fetch,变基
    英语学习笔记14——What color‘s your ... ?
    【引语练习题】间接引语 + 不定式
    《数据结构、算法与应用C++语言描述》-栈的应用-离线等价类问题
  • 原文地址:https://blog.csdn.net/weixin_61197809/article/details/138550023