2020传智杯-区域赛B组

A - 课程报名

题目描述

传智播客推出了一款课程,并进行了一次促销活动。具体来说就是,课程的初始定价为 v 元;每报名 m 个学员,课程的定价就要提升 a 元。由于课程能够容纳的学生有限,因此报名到 n 人的时候就停止报名。 现在老师想知道,当课程停止报名时,一共可以获得多少学费呢?

输入输出格式

输入格式

一行四个使用空格隔开的整数,分别为 n,v,m,a 。

输出格式

一行一个整数,表示答案。

输入输出样例

输入样例 #1

5 1 1 1

输出样例 #1

15解释简单数学题 等差数列   差d=ma a1=mv  n=n/m
import java.util.Scanner;

public class A {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int v = sc.nextInt();
        int m = sc.nextInt();
        int a = sc.nextInt();
        
        double sum = 0;
        
        if (n%m==0) {
            sum = n*v+0.5*n*a*(n/m - 1);
        }else {
            int ex = n%m;
            n -= n%m;
            sum = n*v+0.5*n*a*(n/m - 1);
            sum += (v+n*a/m)*ex;
        }
        System.out.println((int)sum);
    }
}

B - 期末考试成绩

题目描述

传智专修学院的 Java 程序设计课程的评价体系是这样的: 首先,所有学生会有一个卷面得分,这个得分一定是一个 [0,100] 之间的整数。 如果卷面得分在 90 分以上,那么他的 GPA(加权平均成绩) 就是满分 4.0 。 如果卷面得分在 60 \sim 89 之间,那么他每比 90 分少 1 分,那么他的分数就会在 4.0 的基础上减少 0.1 。 如果卷面得分不到 60 分,那么善良的老师会给他照顾。具体来说,如果他的分数为 x ,那么老师会把他的分数调整为 \sqrt{x}\times 10 (向下取整) ,再计算他的 GPA。 如果经过调整该学生的得分依旧没满 60 ,那么他就挂科了,GPA 就是 0 分。 现在给你一个人的期末卷面得分,请你输出他的最终 GPA

输入输出格式

输入格式

一行一个整数 x ,表示该人的期末得分。

输出格式

一个小数点后只有一位的浮点数,表示该同学获得的GPA。 请注意,如果有 .0 请保留。

输入输出样例

输入样例 #1

99

输出样例 #1

4.0

输入样例 #2

88

输出样例 #2

3.8

输入样例 #3

12

输出样例 #3

0.0
解释
入门题 小心向下取整
import java.util.Scanner;

public class B {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int score = sc.nextInt();
        
        
        if (score>=90) {
            System.out.println("4.0");        //向下取整
        }else if (score>=60 && score<=89) {
            double gpa = 4.0-(90-score)*0.1;
            System.out.printf("%.1f",gpa);
        }else if (score<=60) {
            
            int x = (int)(Math.sqrt(score)*10);
            if (x>=60) {
                double gpa = 4.0-(90-x)*0.1;
                System.out.printf("%.1f",gpa);
            }else {
                System.out.println("0.0");
            }
        }
    }
}

C - 志愿者

题目描述

传智专修学院总共召集了 n 位志愿者来负责打扫活动,现在需要你负责帮忙统计每位志愿者的工作情况,用来制作光荣榜,给他们发小花花。 第 i 位志愿者有一个工作时长 t_i ,以及他负责的工作的难度系数 k_i ,一名志愿者的贡献度可以用 k_i \times t_i 确定。 现在要为这些志愿者的贡献度从大到小排个序,请你完成这个任务。相同贡献度的志愿者以工作时长较长的排在前面。如果贡献和时长一样,那么编号小的志愿者排在前面。

输入输出格式

输入格式

一行一个整数 n ,表示志愿者的数量。 接下来 n 行,每行两个使用空格隔开的整数 t_i,k_i ,表示第 i 名志愿者的时间和难度系数。

输出格式

一行,共 n个整数,第 i 个数表示排名为 i 的志愿者的序号,从 1 开始编号。 请注意本题时限为 5s,输入输出规模较大,请注意常数因素对耗时的影响,我们不会给使用 Java 和 Python 的选手增加额外的运行时间。

输入输出样例

输入样例 #1

3
1 2
2 3
3 4

输出样例 #1

3 2 1

解释

java结构体排序 Comparator

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

public class C {
    static class vol{
        public int id;
        public int t;
        public int k;
        public int conty;
        public vol(int id,int t, int k) {
            this.id = id+1;
            this.t = t;
            this.k = k;
            conty = t*k;
        }
    }
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        List<vol> list = new ArrayList<vol>();
        for (int i = 0; i < n; i++) {
            list.add(new vol(i,sc.nextInt(),sc.nextInt()));
        }
        
        Collections.sort(list, new Comparator<vol>() {

            @Override
            public int compare(vol o1, vol o2) {
                if (o1.conty!=o2.conty) {
                    return o2.conty-o1.conty;
                }else if(o1.t!=o2.t) {
                    return o2.t-o1.t;
                }else {
                    return o1.id-o2.id;
                }
            }
        });
        
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i).id+" ");
        }
    }
}

D - 终端

题目描述

有一天您厌烦了电脑上又丑又没用的终端,打算自己实现一个 Terminal。 具体来说,它需要支持如下命令: 1. touch filename:如果名为 filename 的文件不存在,就创建一个这样的文件,如果已经存在同名文件的话则不进行任何操作。 2. rm name:删除名为 name 的文件。如果不存在这样的文件,就不进行任何操作。 3. ls:按创建时间为顺序,显示当前已经存在的未被删除的所有文件。 4. rename xxx yyy:将名为xxx的文件名字改为 yyy 。如果不存在这样的文件,或者已经存在文件名为 yyy 的文件,则不做任何操作。 这里所有涉及的文件名都仅由大写或者小写的英文字母构成,且文件名区分大小写。

输入输出格式

输入格式

第一行一个整数 n ,表示总共要执行的操作数。 接下来 n 行,每行一个字符串,表示一条命令。

输出格式

对于每个 ls 命令,请输出若干行,每行一个字符串,表示一个文件,如果当前并没有任何文件,则什么都不输出。 请注意本题时限为 3s,输入输出规模较大,请注意常数因素对耗时的影响,我们不会给使用 Java 和 Python 的选手增加额外的运行时间。

输入输出样例

输入样例 #1

6
touch yyh
touch yyhtql
rename yyh yyhnb
touch qwq
rename qwq qaq
ls

输出样例 #1

yyhnb
yyhtql
qaq

说明

对于 20% 的数据,只存在 1,3 操作 对于另外 20% 的数据,只存在 1,2,3 操作 对于另外 20% 的数据,只存在 1,3,4 操作 对于 100% 的数据,满足 1 \leq n \leq 1000 保证所有命令的长度不超过 2000 个字符。

*解释*

字符串处理 --刚开始java 数据输错 一个数据报RE 后来改回来了

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class D {
    public static List<String> list = new ArrayList<String>();
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String s = sc.nextLine();
        
        for (int i = 0; i < n; i++) {
            String ml = sc.nextLine();
            String[] split = ml.split(" ");
            if (split[0].equals("rename")) {
                renameFunc(split[1],split[2]);
            }else if (split[0].equals("ls")) {
                for (int i1 = 0; i1 < list.size(); i1++) {
                    System.out.println(list.get(i1));
                }
            }else {
                function(split[0],split[1]);
            }
        }
    }

    private static void renameFunc(String fname, String refname) {
        list.add(list.indexOf(fname), refname);
        list.remove(list.indexOf(fname));
    }

    private static void function(String ml,String file) {
        if ("touch".equals(ml) && list.indexOf(file)==-1) {
            list.add(file);
        }
        if ("rm".equals(ml) && list.indexOf(file)!=-1) {
            list.remove(list.indexOf(file));
        }
    }
}

E - 运气

题目背景

YYH Land(Yoauld,Youthful & Happy Land) 是位于炽蓝仙野的一片神奇的国度,那里的人们过着无拘无束的的快乐生活。

题目描述

哈兰·斯威提是 YYH Land 远近闻名的注铅骰子爱好者。有一天他碰到了这么一个问题: 你有一枚 6 个面的骰子,分别写了 1,2,3,4,5,6 ,每一面朝上的概率是均等的。 现在哈兰想知道,如果他投掷 n 次,并且将结果按顺序写在纸上成为一个数。(比如说如果哈兰扔了 3 次,分别是 3,2,5 ,那么他最后得到的数就是 325 )他现在想知道这个数是 k 的倍数的可能情况有多少种,其中 k 是一个特定的数。 由于这个方案数可能会很大,所以请你输出结果对 10^9+7 取模的结果。

输入输出格式

输入格式

一行两个整数 n,k ,意义如题所示。

输出格式

一行一个整数,表示答案。

输入输出样例

输入样例 #1

2 11

输出样例 #1

6

解释

深搜+剪枝(倒也不用剪)

暴力耗时太长 -填空题暴力还行

import java.util.Scanner;

public class E2 {   //n扔的次数  k能不嫩被k整除
    public static Scanner sc = new Scanner(System.in);
    public static int n = sc.nextInt();
    public static int k = sc.nextInt();
    public static long ans = 0;
    public static long sum = 0;
    
    //深搜
    public static void dfs(int i,int k,long sum){
        if (i==n) {
            if (sum%k==0) {
                ans++;
            }
            return;
        }
        for (int j = 1; j <= 6 ; j++) {
            dfs(i+1,k,(long)(sum+Math.pow(10, i)*j));
        }
    }
    
    public static void main(String[] args) {
        dfs(0,k,sum);
        ans = (long) (ans%(Math.pow(10, 9)+7));
        System.out.println(ans);
    }
}

总之就是一个免费的拿来练手的广告(划掉

posted @ 2020-12-24 10:16  石页的十夜  阅读(443)  评论(0编辑  收藏  举报