CSDN编程挑战赛第六期—参赛心得+题解

简介: CSDN编程挑战赛第六期—参赛心得+题解

前言/背景


对于我所知的其他赛事包含有ACM、蓝桥杯、天梯、codeforces、力扣等等,我的话目前也仅仅只是接触过蓝桥杯、cf以及力扣。


本次CSDN编程竞赛第6期我是第一次参加,在此之前我并没有参加过CSDN的编程赛事,整体来说还是比较不错的。


在2020年下半年参加与蓝桥杯的Java组,最终是得到了国三。


其他竞赛参与仅仅只是今年参与的三次力扣周赛,每次都是A了两题。


大赛简介


CSDN编程大赛第六期


本次CSDN编程大赛第六期的参赛时间如下:


活动时间:9月8日-21日(竞赛时间截止9.18)

竞赛考试时间:9月18日 8:30-11:00(作答时间2小时)

获奖名单公布:9月23日,在本页面公布获奖名单链接

获奖用户信息收集:9月27日

奖品发放:9月30日后7个工作日内

主办方:CSDN。


蓝桥杯介绍


蓝桥杯全国软件和信息技术专业人才大赛(简称“蓝桥杯”)由工业和信息化部人才交流中心主办。


举办时间:报名时间一般为每年9月份-12月份,举办时间一般是报名次年的3月份省赛、6月份决赛,拿到省赛一等奖才能进入在北京举行的全国总决赛。每年举办一次。


参赛流程


这里介绍下CSDN的编程赛的参数过程、比赛流程以及注意事项:


参赛过程就是:先读题,看方法各个参数的一个范围大小,来进行考虑我们所使用的数据结构与算法,最终去跑我们的测试用例,最后去尝试提交。


比赛流程:CSDN中的编程竞赛与力扣是有些差异的,其中有main方法以及对应你需要实现的某个函数方法,其中你只需要关心写你的函数功能方法即可,main方法那些在线IDE是直接有的,整个时长在2h,最终成绩根据你的竞赛分数+用时来进行排名。


注意事项:不能够打开其他的页面(限20次),不能使用本地IDE以及不能进行复制粘贴非在线IDE的代码(限20次),若是一旦超过就会直接提交所有答案。


参赛经历


对于此次CSDN的编程大赛,并没有十分多的准备,直接就上了。


我可以说一说之前的蓝桥杯准备参赛的分阶段时间安排和分工:我第一次参与蓝桥杯是在2020年的10月份,当时的我是大二上。


准备蓝桥杯我所学的包含有:Java基础、Java集合类、数据结构原理知识点、算法思想、刷题。


这里我可以给准备初次参加竞赛的同学一些准备思路:首先你要确定好你要使用的语言,对于这类算法竞赛而言仅仅只需要你能够掌握一些简单的语法就能够开始做题了,关键的、难点就是在对于某类问题你需要使用什么数据结构或者说是算法来去进行一个解决,并且在能够通过的前提下尽可能的去优化时间与空间复杂度这是十分关键的!


基础语言语法 -> 数据结构+算法原理 -> 掌握并熟练使用集合类工具 -> 针对性分类练习刷题 -> 优化时间空间复杂度(学习高阶算法+数据结构)

对于算法竞赛,你需要刷大量类型的题目来去快速的适应,初次一定要多去思考解决的方案思路,你不需要学习工程相关所需要的框架,高级语法那些对于算法竞赛来说并没有多大的作用,如果你想要在竞赛中取得好成绩就去加油吧!


解题思路


在参赛过程中,目前我也刷了大约300+题,虽然不是很多,但是我觉得通过刷题确实提升了自己很大的能力。


拿到一道题时,看它需要让你解决什么问题,接着看参数用例的范围,若是参数用例比较小,完全就是可以暴力去解决,但是若是参数值范围很大,那么肯定就需要使用到一些特定的数据结构与算法来进行解决,这个真的取决于你之前解决过多少问题了。


经验心得


对于参赛的经验心得需要就是放平好心态,然后每天扎扎实实的进步就可以了,最后得到了什么奖就把它当做你努力学习东西的嘉奖,每天进步一点点,随着时间的积累,你得到的收益是什么可观的!


资料分享


目前的话许多学习资料视频都可以在b站找到,刷题平台的话有:leetcode、牛客网、codeforces、各大学校的OJ平台。


我给出一下我的蓝桥杯学习资料:


https://www.yuque.com/docs/share/d8a6769c-07a7-4eea-ba52-4a9c9d1dc014?# 《蓝桥杯相关学习资源》密码:nq47


数据结构原理课程可以去听青岛大学的王卓老师。


CSDN第六期


参赛情况




参赛题解


题1:严查枪火


题目内容:


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


思路:哈希+遍历比较


复杂度分析:时间复杂度O(n);空间复杂度O(1)


class Main {
    private static Set<String> sets = new HashSet<String>();
    public static int solution(int n, ArrayList<String> vector) {
        int result = 0;
        sets.add("ak");
        sets.add("m4a1");
        sets.add("skr");
        for (int i = 0; i < vector.size(); i++) {
            if (sets.contains(vector.get(i))) {
                result++;
            }
        }
        return result;
    }
}



题2:鬼画符门


题目内容:


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


思路:哈希+遍历


复杂度分析:时间复杂度O(n);空间复杂度O(n)


class Main {
    private static Map<String, Integer> map = new HashMap<>();
    public static String solution(int n, ArrayList<String> vector) {
        String result = "";
        int max = -1;
        for (int i = 0; i < vector.size(); i++) {
            map.put(vector.get(i), map.getOrDefault(vector.get(i), 0) + 1);
            int val = map.get(vector.get(i));
            if (val > max) {
                max = val;
                result = vector.get(i);
            }
        }
        return result;
    }
}



题3:收件邮箱


题目内容:


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


思路:校验+遍历


复杂度分析:时间复杂度O(n);空间复杂度O(1)



class Main {
    public static String solution(String str) {
        String result = ""; //mxyatoxcoderdotcom //mxy@oxcoder.com
        char[] arr = str.toCharArray();
        int pos = 0;
        for (int i = 0; i < arr.length; i++) {
            int type = transfer(arr, i);
            if (type == 1) {
                arr[pos++] = '@';
                i++;
            } else if (type == 2) {
                arr[pos++] = '.';
                i += 2;
            } else {
                arr[pos++] = arr[i];
            }
        }
        return new String(arr, 0, pos);
    }
    private static boolean atCount = true;
    public static int transfer(char[] arr, int begin) {
        //测试at @ 
        int n = arr.length;
        if (atCount && (begin + 1) < n && arr[begin] == 'a' && arr[begin + 1] == 't') {
            //开头结尾的at不转换
            if (begin != 0 && begin != (n - 2)) {
                atCount = false;
                return 1;
            }
        }//测试dot . 
        if ((begin + 2) < n && arr[begin] == 'd' && arr[begin + 1] == 'o' && arr[begin + 2] == 't') {
            //开头结尾的at不转换 
            if (begin != 0 && begin != (n - 3)) {
                return 2;
            }
        }
        return 0;
    }
}


题4:最长递增的区间长度


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


思路:双指针


复杂度分析:时间复杂度O(n);空间复杂度O(1)


class Main {
    //双指针 
    public static int solution(int n, ArrayList<Integer> arr) {
        int result = 0;
        int max = -1;
        int len = arr.size();
        for (int i = 0; i < len; i++) {
            int res = arr.get(i);
            int r = i;
            while ((r + 1) < len && arr.get(r + 1) > arr.get(r)) {
                res += arr.get(r + 1);
                r++;
            }
            if (res >= max) {
                result = Math.max(r - i + 1, result);
            }
            i = r;
        }
        return result;
    }
}



参赛体验


csdn的编程赛我也是第一次参加,和力扣的code解题方式一致,都是只需要写函数功能方法就行了。


体验感觉:


1、使用体验的话就是不是很适应,调试窗口需要去点击那个单独调试进到新页面才能够进行调试,而不是直接在当前页调试。


2、每次提交代码时,都要等5秒对于这种问题我不太能够理解。


bug问题:


1、提交所有代码之后,会莫名其妙分数变为0,排名出现问题。


2、比赛结束后,我的排名一直还在不间断的改变。


其他问题:


1、关于提交时间的问题:我第一轮交上去,当时最快好像是20分钟,其实十分钟左右设置是5分钟我都是感觉ok,不过这个3分钟是怎么做到的?我真的是不太理解(可能真的是我太菜了)。


相关文章
|
算法 C语言
【CSDN编程竞赛·第四期】个人参赛经历和个人建议
大家好,我前不久参加了官方举办的CSDN编程比赛,官方举办了四期,第一期的时候没看到,错过了,后面的每一期我都参加了,总的感觉来说,还可以。下面我具体说说第四期相关经验吧。
|
机器学习/深度学习 物联网 C++
【LGR-(-17)】洛谷入门赛 #8个人思考
某 E 在 2022 年的幸运数字是 x xx,这个数可能是正的,也可能是负的。 某 E 想要知道 x   m o d   2023 x \bmod 2023xmod2023 的值。其中,  m o d   \bmodmod 是取模操作。也就是说,你需要求出 x xx 除以 2023 20232023 的余数,这个余数必须是非负整数。 例如,2022   m o d   2023 = 2022 2022 \bmod 2023 = 20222022mod2023=2022,2025   m o d   2023 = 2 2025 \bmod 2023 = 22025mod2023=2,− 2
335 0
|
人工智能 物联网 BI
牛客月赛62思考和总结
牛牛在幼稚园做义工,幼稚园中共有 nnn 颗树,第 1 天中午时它们的高度分别为:h1,h2,…,hnh_1,h_2,…,h_nh1​,h2​,…,hn​ (单位:厘米)。每一天的晚上每棵树的高度都会增加 aaa 厘米,而牛牛的任务则是在第二天的清晨检查每一颗树的高度,若某颗树的高度超过了 kkk 厘米牛牛就会将它的高度修剪为 bbb 厘米。牛牛想请你帮它计算一下第 mmm 天中午每一颗树的高度。
123 0
|
算法 Java C++
2022 第十四届蓝桥杯模拟赛第一期(题解与标程)(上)
2022 第十四届蓝桥杯模拟赛第一期(题解与标程)
400 0
2022 第十四届蓝桥杯模拟赛第一期(题解与标程)(上)
|
测试技术
2022 第十四届蓝桥杯模拟赛第一期(题解与标程)(下)
2022 第十四届蓝桥杯模拟赛第一期(题解与标程)
494 0
2022 第十四届蓝桥杯模拟赛第一期(题解与标程)(下)
|
算法
算法竞赛入门【暑期速成计划】(二)
算法竞赛入门【暑期速成计划】(二)
124 1
算法竞赛入门【暑期速成计划】(二)
|
算法
算法竞赛入门【暑期速成计划】(一)
算法竞赛入门【暑期速成计划】(一)
160 1
算法竞赛入门【暑期速成计划】(一)
|
搜索推荐 测试技术
【蓝桥杯历年真题合集】蓝桥杯2020初赛
门牌制作 小蓝要为一条街的住户制作门牌号。 这条街一共有2020 位住户,门牌号从1 到2020 编号。 小蓝制作门牌的方法是先制作0 到9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌1017 需要依次粘贴字符1、0、1、7,即需要1 个字符0,2 个字符1,1 个字符7。 请问要制作所有的1 到2020 号门牌,总共需要多少个字符2? 输出格式 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只输出这个整数,输出多余的内容将无法得分。 #i.
137 0
【蓝桥杯历年真题合集】蓝桥杯2020初赛
|
人工智能
【蓝桥杯历年真题合集】蓝桥杯2016初赛
最大比例 X星球的某个大奖赛设了M级奖励。每个级别的奖金是一个正整数。并且,相邻的两个级别间的比例是个固定值。 也就是说:所有级别的奖金数构成了一个等比数列。比如:16,24,36,54。其等比值为:3/2 现在,我们随机调查了一些获奖者的奖金数。请你据此推算可能的最大的等比值。 输入格式 输入存在多组测试数据 第一行为数字 N (0&lt;N&lt;100),表示接下的一行包含N个正整数 第二行N个正整数Xi(Xi&lt;1 000 000 000 000),用空格分开。每个整数表示调查到的某人.
151 0
【蓝桥杯历年真题合集】蓝桥杯2016初赛
|
人工智能 移动开发 测试技术
【蓝桥杯历年真题合集】蓝桥杯2022初赛
给定一个长度为 n 的数列A1,A2,... , An 和一个非负整数 x。 给定 m 次查询, 每次询问能否从某个区间 [l, r] 中选择两个数使得他们的异或等于 x。
510 0
【蓝桥杯历年真题合集】蓝桥杯2022初赛
下一篇
DataWorks