package 蓝桥杯习题;/*
小明维护着一个程序员论坛。现在他收集了一份"点赞"日志,日志共有N行。其中每一行的格式是:
ts id
表示在ts时刻编号id的帖子收到一个"赞"。
现在小明想统计有哪些帖子曾经是"热帖"。如果一个帖子曾在任意一个长度为D的时间段内收到不少于K个赞,小明就认为这个帖子曾是"热帖"。
具体来说,如果存在某个时刻T满足该帖在[T, T+D)这段时间内(注意是左闭右开区间)收到不少于K个赞,该帖就曾是"热帖"。
给定日志,请你帮助小明统计出所有曾是"热帖"的帖子编号。
【输入格式】
第一行包含三个整数N、D和K。
以下N行每行一条日志,包含两个整数ts和id。
对于50%的数据,1 <= K <= N <= 1000
对于100%的数据,1 <= K <= N <= 100000 0 <= ts <= 100000 0 <= id <= 100000
【输出格式】
按从小到大的顺序输出热帖id。每个id一行。
*/importjava.util.HashMap;importjava.util.Map;importjava.util.Scanner;publicclassNum21日志统计 {
publicstaticvoidmain(String[] args){
Scanner sc =newScanner(System.in);int n = sc.nextInt();int d = sc.nextInt();int k = sc.nextInt();Map<Integer,Integer> map =newHashMap<>();//记录时间和idMap<Integer,Integer> map1 =newHashMap<>();//记录id和次数for(int i =0; i < n; i++){
int t = sc.nextInt();int id = sc.nextInt();if(map.get(id)==null){
map.put(id, t);
map1.put(id,1);}else{
if(map.get(id)==t || map.get(id)+d>t){
map1.put(id,map1.get(id)+1);}}}for(Integer e :map1.keySet()){
if(map1.get(e)>=k){
System.out.println(e);}}}}
package 蓝桥杯习题;importjava.util.Arrays;importjava.util.Map;importjava.util.Scanner;publicclassNum22最长公共子序列 {
publicstaticvoidmain(String[] args){
Scanner sc =newScanner(System.in);int n = sc.nextInt();int m = sc.nextInt();String s1= sc.next();String s2= sc.next();int[][] f =newint[1010][1010];for(int i =1; i <=n ; i++){
for(int j =1; j <=m ; j++){
if(s1.charAt(i-1)==s2.charAt(j-1)){
f[i][j]= f[i-1][j-1]+1;}else{
f[i][j]=Math.max(f[i-1][j],f[i][j-1]);}}}for(int i =1; i <=n ; i++){
System.out.println(Arrays.toString(f[i]));}System.out.println(f[n][m]);}}
package 蓝桥杯习题;importjava.util.Arrays;importjava.util.Scanner;publicclassNum23最短编辑距离 {
publicstaticvoidmain(String[] args){
Scanner sc =newScanner(System.in);int n = sc.nextInt();String s1 = sc.next();int m = sc.nextInt();String s2 = sc.next();int[][] f =newint[1010][1010];for(int i =0; i <= n; i++){
f[i][0]=i;}for(int i =0; i <= m ; i++){
f[0][i]=i;}for(int i =1; i <=n ; i++){
for(int j =1; j <=m ; j++){
f[i][j]=Math.min(f[i-1][j]+1,f[i][j-1]+1);//进行增加和删除操作if(s1.charAt(i-1)== s2.charAt(j-1)){
f[i][j]=Math.min(f[i][j],f[i-1][j-1]);}else{
f[i][j]=Math.min(f[i][j],f[i-1][j-1]+1);}}}for(int i =1; i <=n ; i++){
System.out.println(Arrays.toString(f[i]));}System.out.println(f[n][m]);}publicintmaxSubArray(int[] nums){
int sum = nums[0];int max = nums[0];for(int i =1; i < nums.length; i++){
sum = sum + nums[i];if(max < sum) max = sum;}return max;}}
package 蓝桥杯习题;publicclassNum24蛇形数组 {
publicstaticvoidmain(String[] args){
int sum =1;for(int i =0; i <20; i++){
sum = sum+i*4;}System.out.println(sum);}}
package 蓝桥杯习题;importjava.util.Scanner;publicclassNum25成绩分析 {
publicstaticvoidmain(String[] args){
Scanner sc =newScanner(System.in);int n = sc.nextInt();int[] a =newint[n];for(int i =0; i < n; i++){
a[i]= sc.nextInt();}int min =Integer.MAX_VALUE;int max =Integer.MIN_VALUE;double sum =0;for(int i =0; i < n; i++){
if(a[i]> max) max =a[i];if(a[i]< min) min =a[i];
sum = sum+a[i];}System.out.println(max);System.out.println(min);System.out.printf("%.2f",sum/n);}}
package 蓝桥杯习题;/*
小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),
在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。
请问,在 1 到 nn 中,所有这样的数的和是多少?
输入
40
输出
574
*/importjava.util.Scanner;publicclassNum26特殊数的和 {
publicstaticvoidmain(String[] args){
Scanner sc =newScanner(System.in);int n = sc.nextInt();int sum =0;for(int i =1; i <= n ; i++){
String s = i+"";