D 终端

题目描述
有一天您厌烦了电脑上又丑又没用的终端,打算自己实现一个 Terminal。

具体来说,它需要支持如下命令:

touch filename:如果名为 filename 的文件不存在,就创建一个这样的文件,如果已经存在同名文件的话则不进行任何操作。

rm name:删除名为 name 的文件。如果不存在这样的文件,就不进行任何操作。

ls:按创建时间为顺序,显示当前已经存在的未被删除的所有文件。

rename xxx yyy:将名为xxx的文件名字改为 yyy 。如果不存在这样的文件,或者已经存在文件名为 yyy 的文件,则不做任何操作。

这里所有涉及的文件名都仅由大写或者小写的英文字母构成,且文件名区分大小写。

输入格式
第一行一个整数 n ,表示总共要执行的操作数。

接下来 n 行,每行一个字符串,表示一条命令。

输出格式
对于每个 ls 命令,请输出若干行,每行一个字符串,表示一个文件,如果当前并没有任何文件,则什么都不输出。

思路: 用数组存下所有创建的文件,用TreeSet集合储存未被删除的文件。

import java.util.Scanner;
import java.util.TreeSet;public class Main{public static void main(String[] args){Scanner sc = new Scanner(System.in);int n = sc.nextInt();int cnt = 0;String[] str = new String[n+5];TreeSet<String> tree = new TreeSet<>();for(int i=0;i<n;i++){String s1 = sc.next();if(s1.equals("touch")){String s2 = sc.next();if(!tree.contains(s1)){str[cnt++] = s2;tree.add(s2);}}else if(s1.equals("rm")){String s2 = sc.next();if(tree.contains(s2)){tree.remove(s2);}}else if(s1.equals("rename")){String xxx = sc.next();String yyy = sc.next();if(tree.contains(xxx)&&!tree.contains(yyy)){tree.remove(xxx);tree.add(yyy);for(int j=0;j<cnt;j++){if(str[j].equals(xxx)){str[j] = yyy;break;}}}}else{for(int j=0;j<cnt;j++){if(tree.contains(str[j])) System.out.println(str[j]);}}}}
}

E 运气

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

题目描述
哈兰·斯威提是 YYH Land 远近闻名的注铅骰子爱好者。有一天他碰到了这么一个问题:

你有一枚 6 个面的骰子,分别写了 1,2,3,4,5,6 ,每一面朝上的概率是均等的。

现在哈兰想知道,如果他投掷 nn 次,并且将结果按顺序写在纸上成为一个数。(比如说如果哈兰扔了 33 次,分别是 3,2,53,2,5 ,那么他最后得到的数就是 325325)他现在想知道这个数是 kk 的倍数的可能情况有多少种,其中 kk 是一个特定的数。

由于这个方案数可能会很大,所以请你输出结果对 10^9+7取模的结果。

输入格式
一行两个整数 n,kn,k ,意义如题所示。

输出格式
一行一个整数,表示答案。

输入输出样例
输入 #1复制
2 11
输出 #1复制
6

思路:爆搜