zoukankan      html  css  js  c++  java
  • 第十届蓝桥杯Java B组

    试题B

    答案:100

    注意Java的substring的两个参数为起始的下标和结尾的下标+1,所以j = i + 1防止出现空字符串

    import java.math.*;
    import java.util.*;
    
    public class Main{
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            String s = "0100110001010001";
            int len = s.length();
            Set<String> se = new HashSet<>();
            for(int i = 0; i < len; i++)
            {
                for(int j = i + 1; j <= len; j++)
                {
                    String tmp = s.substring(i, j);
                    se.add(tmp);
                }
            }
            System.out.println(se.size());
        }
    }

    试题C

    答案:4659

    import java.math.*;
    import java.util.*;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int[] a = new int[30000000];
            a[1] = 1; a[2] = 1; a[3] = 1;
            for(int i = 4; i <= 20190324; i++)
            {
                a[i] = ((a[i-1] + a[i-2])%10000 + a[i-3])%10000;
            }
            System.out.println(a[20190324]);
        }
    }

    试题D

    答案:40785

    import java.math.*;
    import java.util.*;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int ans = 0;
            for(int i = 1; i <= 2019; i++)
            {
                for(int j = i + 1; j <= 2019; j++)
                {
                    for(int k = j + 1; k <= 2019; k++)
                    if(check(i) && check(j) && check(k) && (i + j + k) == 2019) 
                        ans++;
                }
            }
            System.out.println(ans);
        }
        public static boolean check(int x)
        {
            while(x > 0)
            {
                if(x % 10 == 2 || x % 10 == 4) return false;
                x /= 10;
            }
            return true;
        }
    } 

    试题E

    答案

    DDDDRRURRRRRRDRRRRDDDLDDRDDDDDDDDDDDDRDDRRRURRUURRDDDDRDRRRRRRDRRURRDDDRRRRUURUUUUUUULULLUUUURRRRUULLLUUUULLUUULUURRURRURURRRDDRRRRRDDRRDDLLLDDRRDDRDDLDDDLLDDLLLDLDDDLDDRRRRRRRRRDDDDDDRR

    import java.math.*;
    import java.util.*;
    
    class node
    {
        int x,y;
        String ans;
        node(int x,int y, String ans)
        {
            this.x = x;
            this.y = y;
            this.ans = ans;
        }
    }
    
    public class Main{
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            String s = "01010101001011001001010110010110100100001000101010"
                    + "00001000100000101010010000100000001001100110100101"
                    + "01111011010010001000001101001011100011000000010000"
                    + "01000000001010100011010000101000001010101011001011"
                    + "00011111000000101000010010100010100000101100000000"
                    + "11001000110101000010101100011010011010101011110111"
                    + "00011011010101001001001010000001000101001110000000"
                    + "10100000101000100110101010111110011000010000111010"
                    + "00111000001010100001100010000001000101001100001001"
                    + "11000110100001110010001001010101010101010001101000"
                    + "00010000100100000101001010101110100010101010000101"
                    + "11100100101001001000010000010101010100100100010100"
                    + "00000010000000101011001111010001100000101010100011"
                    + "10101010011100001000011000010110011110110100001000"
                    + "10101010100001101010100101000010100000111011101001"
                    + "10000000101100010000101100101101001011100000000100"
                    + "10101001000000010100100001000100000100011110101001"
                    + "00101001010101101001010100011010101101110000110101"
                    + "11001010000100001100000010100101000001000111000010"
                    + "00001000110000110101101000000100101001001000011101"
                    + "10100101000101000000001110110010110101101010100001"
                    + "00101000010000110101010000100010001001000100010101"
                    + "10100001000110010001000010101001010101011111010010"
                    + "00000100101000000110010100101001000001000000000010"
                    + "11010000001001110111001001000011101001011011101000"
                    + "00000110100010001000100000001000011101000000110011"
                    + "10101000101000100010001111100010101001010000001000"
                    + "10000010100101001010110000000100101010001011101000"
                    + "00111100001000010000000110111000000001000000001011"
                    + "10000001100111010111010001000110111010101101111000";
            int[][] a = new int[30][50];
            int[][] vis = new int[30][50];
            int len = s.length();
            for(int i = 0; i < len; i++)
            {
                a[i/50][i%50] = s.charAt(i) - '0';
            }
            String ans = "";
            int x = 0, y = 0;
            vis[0][0] = 1;
            int[][] k = {{1, 0}, {0, -1}, {0, 1}, {-1, 0}};
            node tmp = new node(0, 0 , "");
            Queue<node> q= new LinkedList<>();
            q.offer(tmp);
            while(!q.isEmpty())
            {
                node t = q.poll();
                if(t.x == 29 && t.y == 49)
                {
                    System.out.println(t.ans);
                    break;
                }
                for(int i = 0; i <= 3; i++)
                {
                    int tmpx = t.x + k[i][0], tmpy = t.y + k[i][1];
                    if(tmpx >= 0 && tmpx < 30 && tmpy >= 0 && tmpy < 50 && vis[tmpx][tmpy] == 0 && a[tmpx][tmpy] == 0)
                    {
                        vis[tmpx][tmpy] = 1;
                        String st = t.ans;
                        if(i == 0) st += 'D';
                        if(i == 1) st += 'L';
                        if(i == 2) st += 'R';
                        if(i == 3) st += 'U';
                        node t2 = new node(tmpx, tmpy, st);
                        q.offer(t2);
                    }
                }
            }
        }
    } 

    试题F

    import java.math.*;
    import java.util.*;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            int ans = 0;
            for(int i = 1; i <= n; i++)
            {
                if(check(i)) ans += i;
            }
            System.out.println(ans);
        }
        public static boolean check(int x)
        {
            while(x > 0)
            {
                if(x % 10 == 2 || x % 10 == 0 || x % 10 == 1 || x % 10 == 9) 
                    return true;
                x /= 10;
            }
            return false;
        }
    } 

    试题G

    import java.math.*;
    import java.util.*;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            Map<Integer, List<Integer>> mp = new HashMap<>();
            int n = sc.nextInt();
            int m = sc.nextInt();
            int t = sc.nextInt();
            int[] sum = new int[n+1];
            int[] cnt = new int[n+1];
            for(int i = 0; i < m; i++)
            {
                int tmpt = sc.nextInt();
                int tmpid = sc.nextInt();
                if(mp.get(tmpt) == null)
                {
                    List<Integer> tmpl = new ArrayList<>();
                    tmpl.add(tmpid);
                    mp.put(tmpt, tmpl);
                }
                else 
                    mp.get(tmpt).add(tmpid);
            }
            int last = 0, ans = 0;
            for(Integer key : mp.keySet())
            {
                int key1 = key;
                List<Integer> tmpL = mp.get(key1);
                int[] vis = new int[n+1];
                int timespan = key1 - last;
                for(int j : tmpL) vis[j] += 1;
                for(int j = 1; j <= n; j++)
                {
                    if(vis[j] > 0) sum[j] += 2 * vis[j];
                    else sum[j] = sum[j] - timespan < 0 ? 0 : sum[j] - timespan;
                    if(sum[j] > 5)
                        cnt[j] = 1;
                    else if(sum[j] <= 3)
                        cnt[j] = 0;
                }
                last = key1;
            }
            for(int i = 1; i <= n; i++)
            {
                int timespan = t - last;
                sum[i] = sum[i] - timespan < 0 ? 0 : sum[i] - timespan;
                if(sum[i] <= 3)
                    cnt[i] = 0;
            }
            for(int i = 1; i <= n; i++)
            {
                if(cnt[i] == 1)
                    ans++;
            }
            System.out.println(ans);
        }
    } 

    试题H

    import java.math.*;
    import java.util.*;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int K = sc.nextInt();
            sc.nextLine();
            String s = sc.nextLine();
            String[] word = s.split("\s+|\.");
            int len = word.length;
            int ans = 0;
            for(int i = 0; i < len; i++)
            {
                if(word[i].equals("Alice"))
                {
                    for(int j = i + 1; j < len; j++)
                    {
                        if(word[j].equals("Bob"))
                        {
                            int L = 1;
                            for(int k = i + 1; k < j; k++) 
                                L += (1 + word[k].length());
                            if(L <= K) ans++;
                        }
                    }
                }
            }
            for(int i = 0; i < len; i++)
            {
                if(word[i].equals("Bob"))
                {
                    for(int j = i + 1; j < len; j++)
                    {
                        if(word[j].equals("Alice"))
                        {
                            int L = 1;
                            for(int k = i + 1; k < j; k++)
                                L += (1 + word[k].length());
                            if(L <= K) ans++;
                        }
                    }
                }
            }
            System.out.println(ans);
        }
    } 
  • 相关阅读:
    Java实现 蓝桥杯 算法提高 小X的购物计划
    Java实现 蓝桥杯 算法提高 小X的购物计划
    Java实现 第十一届 蓝桥杯 (高职专科组)省内模拟赛
    Java实现 第十一届 蓝桥杯 (高职专科组)省内模拟赛
    Java实现 第十一届 蓝桥杯 (高职专科组)省内模拟赛
    Java 第十一届 蓝桥杯 省模拟赛 小明的城堡
    Java 第十一届 蓝桥杯 省模拟赛 小明的城堡
    Java 第十一届 蓝桥杯 省模拟赛 小明的城堡
    129. Sum Root to Leaf Numbers
    117. Populating Next Right Pointers in Each Node II
  • 原文地址:https://www.cnblogs.com/benzikun/p/14621485.html
Copyright © 2011-2022 走看看