赛后A题
众所周知,出题是一项挺辛苦的活,组题更是一个技术活,所以有时候即使出题人想着给大家送点分,也会因为阴差阳错的出题和奇葩离谱的组题而变得无法送到大家的手中。
你现在是这场考试的组题人,你正在为这个事情发愁呢……
你现在手上有很多道题目,每个题目有一个核心的知识点,我们用一个字符来代表每个题目的知识点,并且字符的大小表示了知识点的难度。
于是所有的题目可以用一个字符串来表示,比如 "abca" 表示有四道题,知识点分别为 a、b、c 和 a,并且第三道题是最难的,第一道题和第四道题难度一样。
作为组题人,你需要能够识别出一样的套题,以及比较套题的难度。
如果两套题的题目按照顺序对比知识点是一样的,那么我们就说这两套题是一样的,比如任意的 "abca" 都是一样的,但是 "abca" 和 "aabc" 是不一样的,因为题目知识点的排列不一样。
我们判断两套题哪套更难有一个很简单的方法,就是看两套题的知识点字典序哪个更大,字典序越大越困难,比如 "zzba" 就比 "abc" 要难非常多,"abb“ 就比 "ab" 要难。
临近截止日期,你已经没有精力去细致地挑选题目了,于是你打算选一段连续的题目组成一套题,并且你希望选出不同的套题中第 𝐾K 简单的套题来给大家送分,你可以找出这一套题来吗?
输入格式:
第一行一个字符串 𝑠,表示所有题目的知识点。
接下来一行一个整数 K,表示需要找的套题的难度。
输出格式:
输出一行一个字符串,表示找到的第𝐾简单的套题的知识点。
输入样例:
aba
4
输出样例:
b
对于给定的样例,前 4 简单的套题分别为:a、ab、aba、b,故答案为 b。
对于 100%100% 的数据,1≤∣𝑠∣≤5000,1≤𝐾≤51≤∣s∣≤5000,1≤K≤5,保证答案存在。
import java.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.TreeSet;
public class Main {
static
class FastReader {
private StringTokenizer tokenizer = new StringTokenizer("");
private BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
public boolean hasNext() {
while (!tokenizer.hasMoreTokens()) {
String nextLine = innerNextLine();
if (nextLine == null) {
return false;
}
tokenizer = new StringTokenizer(nextLine);
}
return true;
}
public String next() {
hasNext();
return tokenizer.nextToken();
}
public int nextInt() {
return Integer.parseInt(next());
}
public long nextLong() {
return Long.parseLong(next());
}
private String innerNextLine() {
try {
return reader.readLine();
} catch (IOException ex) {
return null;
}
}
public String nextLine() {
tokenizer = new StringTokenizer("");
return innerNextLine();
}
}
public static void main(String[] args) {
FastReader sc = new FastReader();
String s = sc.next();
int k = sc.nextInt();
TreeSet<String> ts = new TreeSet<>();
int n = s.length();
for (int i = 0; i < n; i++) {
for (int j = 1; j <= 5 && i + j <= n; j++) {
ts.add(s.substring(i, i + j));
}
}
int counter = 0;
for (String kk: ts) {
counter++;
if (counter == k) {
System.out.println(kk);
}
}
}
public long funcLjyhz(int[] nums) {
long sum = 0;
Arrays.sort(nums);
for (int i = 0; i < nums.length; i++) {
sum += nums[i];
}
for (int i = nums.length - 1; i >= 2; i--) {
sum -= nums[i];
if (sum > nums[i]) {
return sum + nums[i];
}
}
return -1;
}
}