CSDN线上竞赛编程第六期参赛心得

CSDN编程竞赛报名地址:https://edu.csdn.net/contest/detail/16
(请不要删掉此地址)

前言/背景

偶然间被朋友告知CSDN有算法竞赛,被推了链接就抱着试一试得心态。

大赛简介

CSDN线上竞赛编程第六期

参赛流程

1、9月18日 11:00前点击比赛报名,并于9月18日 8:30—11:00,PC端登陆考试系统(当前页面届时将开放考试入口),在2小时内完成考试作答

2、9月8日-9月26日,点击竞赛专属话题,在对应的模板编辑器里发稿成功即参与成功

参赛经历

因为不知道赛制,所以一早就打开了idea,结果发现不能切出页面。。。
看了第一题发现比力扣周赛的easy还要简单,心态平稳了很多,结果写的时候又发现连最基本的提示都没有,力扣最起码还会有前后文打过的单词的提示,一个一个字母敲的真的很费劲。这时候心态已经有点崩了,做到第二题发现跟第一题难度没差多少,这时候发现有点不对劲了,果不其然最后四道题都是easy级别,最终34minAK,当时以我的经验判断这个难度34minAK估计得排到几百名,结果最终居然进了前30,比较出乎意料。

解题思路

1、题目名称:严查枪火

X国最近开始严管枪火。 像是“ak”,“m4a1”,“skr”。都是明令禁止的。 现在小Q查获了一批违禁物品其中部分是枪支。
小Q想知道自己需要按照私藏枪火来关押多少人。 (只有以上三种枪被视为违法)

import java.util.ArrayList;
import java.util.Scanner;
class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		String str_0 = scan.nextLine().trim();
		int n = Integer.parseInt(str_0);
		ArrayList<String> vector = new ArrayList<>();
		for (int i = 0; i < n; i++){
			String str_1 = scan.nextLine().trim();
			vector.add(str_1);
		}
		scan.close();
		int result = solution(n, vector);
		System.out.println(result);
	}
	public static int solution(int n, ArrayList<String> vector){
		int result = 0;
		// TODO: 请在此编写代码
		for(int i=0;i<vector.size();i++){
			String s=vector.get(i);
			if("ak".equals(s)||"m4a1".equals(s)||"skr".equals(s)){
				result++;
			}
		}
		return result;
	}
}

2、题目名称:鬼画符门

鬼画符门,每年都会统计自己宗门鬼画符消耗的数量,往年一直是大师兄管理, 但是这次鬼艺接手了, 你能帮鬼艺写一个
程序统计每年消耗数量最多的鬼画符吗?

import java.util.ArrayList;
import java.util.Scanner;
import java.util.HashMap;
class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		String str_0 = scan.nextLine().trim();
		int n = Integer.parseInt(str_0);
		ArrayList<String> vector = new ArrayList<>();
		for (int i = 0; i < n; i++){
			String str_1 = scan.nextLine().trim();
			vector.add(str_1);
		}
		scan.close();
		String result = solution(n, vector);
		System.out.println(result);
	}
	public static String solution(int n, ArrayList<String> vector){
		String result = "";
		// TODO: 请在此编写代码
		HashMap<String,Integer> map=new HashMap<>();
		for(int i=0;i<n;i++){
			if(map.containsKey(vector.get(i))){
				Integer m=map.get(vector.get(i));
				map.put(vector.get(i),m+1);
			}
			else{
			map.put(vector.get(i),1);
			}
		}
		int max=0;
		for(String s:map.keySet()){
			Integer m=map.get(s);
			if(m>max){
				max=m;
				result=s;
			}
		}
		return result;
	}
}

3、题目名称:收件邮箱

已知字符串str,str表示邮箱的不标准格式。 其中”.”会被记录成”dot”,”@”记录成”at”。 写一个程序将str转化成可用
的邮箱格式。(可用格式中字符串中除了开头结尾所有”dot”,都会被转换,”at”只会被转化一次,开头结尾的不转化)

import java.util.*;
import java.util.ArrayList;
import java.util.Scanner;
class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		String str_0 = scan.nextLine().trim();
		String str = str_0;
		scan.close();
		String result = solution(str);
		System.out.println(result);
	}
	public static String solution(String str){
		String result = "";
		// TODO: 请在此编写代码
		StringBuilder sb=new StringBuilder();
		StringBuilder sb1=new StringBuilder();
		sb.append(str.charAt(0));
		for(int i=1;i<str.length()-1;i++){
			sb1.append(str.charAt(i));
		}
		String str1=sb1.toString();
		str1=str1.replaceAll("dot","\\.");
		str1=str1.replaceFirst("at","@");
		sb.append(str1);
		sb.append(str.charAt(str.length()-1));
		result=sb.toString();
		return result;
	}
}

4、题目名称:最长递增的区间长度

给一个无序数组,求最长递增的区间长度。如:[5,2,3,8,1,9] 最长区间 2,3,8 长度为 3

import java.util.ArrayList;
import java.util.Scanner;
class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		String str_0 = scan.nextLine().trim();
		int n = Integer.parseInt(str_0);
		String str_1 = scan.nextLine();
		String[] line_list_1 = str_1.trim().split(" ");
		ArrayList<Integer> arr = new ArrayList<>();
		for(int i = 0; i < line_list_1.length; i++){
			arr.add(Integer.parseInt(line_list_1[i]));
		}
		scan.close();
		int result = solution(n, arr);
		System.out.println(result);
	}
	public static int solution(int n, ArrayList<Integer> arr){
		int result = 1;
		// TODO: 请在此编写代码
		int max=0;
		for(int i=1;i<arr.size();i++){
			if(arr.get(i)>arr.get(i-1)){
				result++;
			}
			else{
				max=Math.max(max,result);
				result=1;
			}
		}
		max=Math.max(max,result);
		return max;
	}
}

经验心得

> 提示:可总结自己参赛的经验心得,给大家一些建议参考。
这次比赛的四道题都属于简单级别,有点出乎意料,原本以为难度要略高于lc的双周赛,结果在不熟悉赛制的情况下半个小时AK了,要是lc的大佬们参加的话10min以内AK的没有500人应该也有200人,整体来说难度偏低,拉不开差距。

资料分享

力扣,牛客,acwing,洛谷等都是不错的平台

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

Hell_potato777

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值