【CSDN竞赛】题目讲解+对想打比赛的朋友的一些学习建议(ACM,蓝桥杯,PAT等)

     

目录

比赛反馈:       

学习建议:

    算法路线:    

 刷题平台:

比赛:

比赛题目讲解:

第一题:

第二题: 

第三题: 

第四题: 

结尾: 

   今天也是成功参加了CSDN编程赛线上赛的比赛,首先值得肯定的是比赛的模式还算完整,虽然有些漏洞,但是整体上来说还是较为完整的。

 

比赛反馈:       

 作为一个常年混迹在ACM,PAT,蓝桥杯比赛中的选手来说,题目并不算太难,不过值得建议的是:题目有很多都是原题,这点对比力扣或者牛客的线上赛并不算好,所以我认为官方大大可以在题目质量上去加强以下。

        其次值得吐槽的一点是,这次的三四题有明显的bug,首先第三题是一个很简单的dp原题,但是官方给出的测试数据似乎有问题,这也导致了参赛的体验感不是特别好,第四题呢就是题意描述不太清楚,而且测试的数据也有一点问题感觉,所以导致这次比赛的体验感不好。

学习建议:

       

        然后对于想进行这总算法学习的朋友,我建议你要先去了解以下你需要学习什么知识,然后根据这些知识去一个个啃,最为重要的是,一定要刷题!一定要刷题!一定要刷题!至于刷题的平台我在下文中会给你推荐一些我认为比较好的平台的。然后你可以试着去参加一些平台的比赛,就比如这次的CSDN比赛,去练练手,增加自己的知识面,然后就可以试着去报名蓝桥杯,PAT,CCPC,ICPC等一系列这种类型的比赛啦。 

    算法路线:    

 

 刷题平台:

        关于刷题的话现阶段这些程序员相关的网站都有自己的刷题体系,比如:CSDN,牛客,力扣,洛谷等很多网站都有自己的题库,大家可以去适当的选择自己比较喜欢的网站去进行刷题。

 

 

 这些都是一些刷题的平台,你完全可以去这些平台上去进行平时的练习。

比赛:

 接下来参加比赛的话,上面有提到说是一些比赛,其实在我看来比赛只有ACM和其他。虽然这样说很夸张,但是ACM的含金量是毋庸置疑的,他没有所谓的学校保护,大家众生平等,这样的一个赛事也注定了他的含金量是非常的高的,ACM拿奖也是我们每个算法人心中的梦想,悄悄的说一句噢,ACM的比赛是全英文的。

比赛题目讲解:

最后来说一下今天的一个比赛题目吧。

第一题:

第一题的话是一个非常简单的模拟,

题目我也找到了:

题目描述
夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了。小玉家今天收到了一份电费通知单。小玉看到上面写:据闽价电[2006]27号规定,月用电量在150千瓦时及以下部分按每千瓦时0.4463元执行,月用电量在151~400千瓦时的部分按每千瓦时0.4663元执行,月用电量在401千瓦时及以上部分按每千瓦时0.5663元执行;小玉想自己验证一下,电费通知单上应交电费的数目到底是否正确呢。请编写一个程序,已知用电总计,根据电价规定,计算出应交的电费应该是多少。

输入输出格式
输入格式:

输入一个整数,表示用电总计(单位以千瓦时计),不超过10000。

输出格式:

输出一个数,保留到小数点后1位(单位以元计,保留到小数点后1位)。

输入输出样例
输入样例#1: 

267

输出样例#1: 

121.5
 

这道题没什么难度,就是按照他们题目的意思进行模拟就行。主要就是考察了if语句。

AC代码:

#include<iostream>
#include<stdio.h>

using namespace std ;

int main(void)
{
    double e ;	//e代表电量 
	double money;	//代表电费 
 
    cin>>e;
    
    if(e<=150)	
        money = e*0.4463;	//电量少于150KWh时的电费
    if(e>150 && e<=400)	
        money = 150*0.4463+(e-150)*0.4663;	//电量多于150KWh,少于400KWh时的电费
    if(e>400)		
        money = 150*0.4463+250*0.4663+(e-400)*0.5663;	//电量多于400KWh时的电费
    
    printf("%.1lf",money); //输出时保留小数点1位
    cout << endl ; 
    
    return 0;
}

第二题: 

第二题也是一个简单的模拟,好像是一个字符串的反转吧。

题目大概是这样的:于一个字符串,请设计一个算法,只在字符串的单词间做逆序调整,也就是说,字符串由一些由空格分隔的部分组成,需要将这些部分逆序。

这题也是so easy啊,直接进行模拟就行,没有什么难度,暴力直接解出来了。

AC代码:

#include <cstdio>
#include <iostream>
#include <string.h>

using namespace std ;
 
int main() {
    
    string s ;
    getline(cin, s) ;
    int head;
    int tail;
    int index;
    tail = head = s.size() - 1;
 
    for( ; head >= -1; ) {
        if(head != -1 && s[head] != ' ') {
            head--;
        } else {
            if(tail != head) {
                for(index = head + 1; index <= tail; index++) {
                    printf("%c", s[index]);
                }
                printf(" ");
                head--;
                tail = head;
            }
        }
    }   
 
    return 0;
}

第三题: 

 第三题就有一点难度了,这里涉及到了一个简单的dp思想。

大概的题目要求是这样的:

将整数 n 分成 k 份,且每份不能为空,任意两个方案不相同(不考虑顺序)。

例如:n=7,k=3,下面三种分法被认为是相同的。

1,1,5
1,5,1
5,1,1

问有多少种不同的分法。

至于dp不太了解的朋友门们,可以关注下我的零基础学算法,我后面会为大家讲解dp思想,以及一些基础题型和模板的。

这里我给出一个AC代码:

#include <iostream>
using namespace std;
typedef long long ll;
int n, k;
ll f[205][200];
const int mod=1e9+7;

int main() {
    cin >> n >> k;
    if(k>n){
        cout<<0<<endl;
        return 0;
    }
    for (int i = 1; i <= n; i++) {
        f[i][1] = 1;
        for (int j = 2; j <= min(i, k); j++){
            f[i][j] = f[i - j][j] + f[i - 1][j - 1];
            f[i][j]%=mod;
        }
    }
    cout << f[n][k]%mod<<endl;;
    return 0;
}

第四题: 

第四题

对于第四题我也很疑惑,我不是很明白题目的意思,这里我也没给出正确代码,不过等官方放出公布后,我会第一时间更新这个题目的讲解,我个人感觉这个题目是用贪心+dp进行思考的。

题目的大致意思是:

完美数列是,总中间到两边分别递减1的数列,然后两边数还要相等,给你一个数组为你最小操作数(应该是)。

这个题目我没有找到完整题目,因为现在比赛试题还看不到,所以只能把大致的意思描述提一下,我个人使用贪心进行写的时候没有通过全部的样例,这里也就不给大家放我的错误代码啦。 

结尾: 

 大家有什么要求尽管给我提出,我都会一一详细解答的。

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉云生烟

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值