第十二届蓝桥杯省赛JavaC组【第二场】真题——详细答案对照(完整版)-2

简介: 第十二届蓝桥杯省赛JavaC组【第二场】真题——详细答案对照(完整版)

#G 特殊年份

时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分


问题描述


今年是 2021 年,2021 这个数字非常特殊,它的千位和十位相等,个位比百位大 1 ,我们称满足这样条件的年份为特殊年份。

输入 5 个年份,请计算这里面有多少个特殊年份。


输入格式


输入 5  行,每行一个 4 位十进制数(数值范围为 1000 至 9999 ),表示一个年份。


输出格式


输出一个整数,表示输入的 5 个年份中有多少个特殊年份。


测试样例1

Input:

2019

2021

1920

2120

9899


Output:

2


Explanation:

2021 和 9899 是特殊年份,其它不是特殊年份。


代码实现


static int sum=0;
public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    for (int i = 0; i < 5; i++) {
        f(sc.nextInt());
    }
    System.out.println(sum);
}
public static void f(int x) {
    if(x%10==x/100%10+1&&x/1000==x/10%10) {
        sum++;
    }
}

#H 小平方

时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分


问题描述


小蓝发现,对于一个正整数 n 和一个小于 n 的正整数 v,将 v 平方后对 n 取余可能小于 n 的一半,也可能大于等于 n 的一半。

请问,在 1 到 n − 1 中,有多少个数平方后除以 n 的余数小于 n 的一半。

例如,当 n = 4 时,1 , 2 , 3 的平方除以 4 的余数都小于 4 的一半。

又如,当 n = 5 时,1 , 4 的平方除以 5 的余数都是 1 ,小于 5 的一半。而 2 , 3 的平方除以 5 的余数都是 4 ,大于等于 5 的一半。


输入格式


输入一行包含一个整数 n 。


输出格式


输出一个整数,表示满足条件的数的数量。


测试样例1

Input:

5


Output:

2

评测用例规模与约定


对于所有评测用例,1 ≤ n ≤ 10000 。

代码实现


public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    int x=sc.nextInt();
    int y=x/2;
    int sum=0;
    for (int i = 1; i <= x-1; i++) {
        double a=Math.pow(i, 2)%x;
        if(a<y) {
            sum++;
        }
    }
    System.out.println(sum);
}

#I 完全平方数

时间限制: 2.0s 内存限制: 512.0MB 本题总分:25 分


问题描述


一个整数 a 是一个完全平方数,是指它是某一个整数的平方,即存在一个整数 b ,使得 a = b^2 。

给定一个正整数 n ,请找到最小的正整数 x ,使得它们的乘积是一个完全平方数。


输入格式


输入一行包含一个正整数 n 。


输出格式


输出找到的最小的正整数 x 。


测试样例1

Input:

12


Output:

3

测试样例2

Input:

15


Output:

15

评测用例规模与约定


对于 30% 的评测用例,1 ≤ n ≤ 1000 ,答案不超过 1000 10001000。

对于 60% 的评测用例,1 ≤ n ≤ 10^8 ,答案不超过 10^8。

对于所有评测用例,1 ≤ n ≤ 1 0^12 ,答案不超过 10^12。



代码实现


public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    int n=sc.nextInt();
    int a=1;
    while(true) {
        String str=String.valueOf(Math.sqrt(n*a));
        int x=str.indexOf(".");
        int b=Integer.parseInt(String.valueOf(str.charAt(x+1)));
        if(b==0&&str.length()-x-1==1) {
            System.out.println(a);
            return;
        }
        a++;
    }
}


#J 负载均衡

时间限制: 2.0s 内存限制: 512.0MB 本题总分: 25 分


问题描述


有 n 台计算机,第i台计算机的运算能力为  。

有一系列的任务被指派到各个计算机上,第 i 个任务在  时刻分配,指定计算机编号为  ,耗时为  且算力消耗为  。如果此任务成功分配,将立刻开始运行,期间持续占用    号计算机    的算力,持续  秒。对于每次任务分配,如果计算机剩余的运算能力不足则输出 −1,并取消这次分配,否则输出分配完这个任务后这台计算机的剩余运算能力。


输入格式


输入的第一行包含两个整数 n,m,分别表示计算机数目和要分配的任务数。

第二行包含 n 个整数 ,,···,分别表示每个计算机的运算能力。

接下来 m 行每行 4 个整数 意义如上所述。数据保证  严格递增,即 。


输出格式


输出 m 行,每行包含一个数,对应每次任务分配的结果。

测试数据


Input:

2 6

5 5

1 1 5 3

2 2 2 6

3 1 2 3

4 1 6 1

5 1 3 3

6 1 3 4

Output:

2

-1

-1

1

-1

0


没有完全解出来,但是已经能过几个数据了,多少有一些提示作用。


代码实现 (有个bug没修,但是给的测试用例没问题)

//存储任务的总信息
  static Map<Integer, List<Integer>> map=new HashMap<>();
  //存储每个任务的时间
  static List<Integer> times=new ArrayList<>();
  //存储每个任务所消耗的空间
  static List<Integer> kj=new ArrayList<>();
  public static void main(String[] args) {
  Scanner sc=new Scanner(System.in);
  int n=sc.nextInt();//电脑的数量
  int m=sc.nextInt();//任务数
  for (int i =1 ; i < n+1; i++) {
    map.putIfAbsent(i, new ArrayList<>());
    map.get(i).add(sc.nextInt());
  }
  for (int i = 1; i < m+1; i++) {
    int a=sc.nextInt();//读取任务编号
    int b=sc.nextInt();//读取电脑编号
    int c=sc.nextInt();//读取时间消耗
    int d=sc.nextInt();//读取空间消耗
    //时间消耗随着任务的增长而减小
    for (Integer item:map.keySet()) {
    if(map.get(item).size()==5) {
      for (int j = 0; j < times.size(); j++) {
      int y=times.get(j)-1;
      if(y==0) {
        int x=map.get(item).get(0);
        map.get(item).set(0,x+kj.remove(j));
        times.remove(j);
      }else {
        times.set(j, y);
      }  
      }
    }
    }
    //初始化电脑的任务
    if(map.get(b).get(0)>d&&map.get(b).size()<5) {
    map.get(b).add(a);
    map.get(b).add(b);
    map.get(b).add(c);
    map.get(b).add(d);
//    times.add(c);
//    kj.add(d);
    }
    //判断任务的消耗是否超出电脑本身的消耗
    if(map.get(b).get(0)-d<0) {
    System.out.println(-1);
    continue;
    }else {
    //未超出电脑消耗的话则为任务分配空间
    int x=map.get(b).get(0)-d;
      times.add(c);
      kj.add(d);
      System.out.println(x);
    map.get(b).set(0,x);
    }
  }
  }


照搬网上的,话说按照网上的这个方法,我是很懵逼的。


import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.PriorityQueue;
import java.util.Queue;
public class Main {
    public static void main(String[] args) {
        InputReader in = new InputReader(System.in);
        PrintWriter out = new PrintWriter(System.out);
        Queue<Item> queue = new PriorityQueue();
        int n = in.nextInt(), m = in.nextInt();
        int[] comp = new int[n + 1];
        int a, b, c, d, time = 1;
        for (int i = 1; i <= n; i++)
              comp[i] = in.nextInt();
        for (int i = 0; i < m; i++) {
            a = in.nextInt();
            b = in.nextInt();
            c = in.nextInt();
            d = in.nextInt();
            if (a > time) time = a;
            while (queue.size() > 0) {
                Item item = queue.peek();
                if (item.time > time) break;
                comp[item.idx] += item.val;
                queue.remove();
            }
            if (comp[b] >= d) {
                queue.add(new Item(b, d, time + c));
                out.println(comp[b] -= d);
            } else out.println("-1");
        }
        out.flush();
    }
    static class Item implements Comparable<Item> {
        int time, idx, val;
        Item(int idx, int val, int time) {
            this.time = time;
            this.idx = idx;
            this.val = val;
        }
        @Override
        public int compareTo(Item o) {
            return this.time - o.time;
        }
    }
    static class InputReader {
        BufferedReader read;
        StringTokenizer token;
        String delimiters;
        InputReader (InputStream in) { this(in, " \t\n\r\f"); }
        InputReader (InputStream in, String delimiters) {
            this.read = new BufferedReader(new InputStreamReader(in));
            this.token = new StringTokenizer("", this.delimiters = delimiters);
        }
        String next() {
            while (!token.hasMoreTokens())
                try {
                    token = new StringTokenizer(read.readLine(), delimiters);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            return token.nextToken();
        }
        int nextInt() { return Integer.parseInt(next()); }
    }
}
相关文章
|
6月前
|
机器学习/深度学习 人工智能 测试技术
第十三届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
第十三届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
458 0
第九届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-2
第九届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
91 0
第九届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-2
|
算法
第九届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-1
第九届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
1931 0
第九届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-1
第九届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-3
第九届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
204 0
第九届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-3
第八届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-3
第八届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
145 0
第八届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-3
|
数据安全/隐私保护
第十一届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-1
第十一届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
94 0
第十一届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-1
|
测试技术
第十一届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-2
第十一届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
103 0
第十一届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-2
|
机器学习/深度学习 测试技术
第十届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)-2
第十届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)
144 0
第十届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)-2
|
人工智能
第十届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)-1
第十届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)
237 0
第十届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)-1
|
Java
第七届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)-2
第七届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)
148 0
第七届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)-2