前言/背景CSDN编程竞赛报名地址:https://edu.csdn.net/contest/detail/16
题目与解题代码目前已经连续参加5次CSDN的编程竞赛了,这种比赛挺有意义的,希望一直举办下去!
本次题目有四个,相对往期,这期的题目比较简单,所以一堆人拿到了满分(包括我)。所有题目直接暴力都可以解出来,这边贴出我当时的解题代码。
#include
#include
#include
#include
int solution(int n, std::vector<std::string>& vec){
int result=0;
// TODO:
for(int i=0;i<n;i++){
if(vec[i].size()>=2&&vec[i].size()<=4){
if(vec[i]=="ak")result++;
else if(vec[i]=="m4a1")result++;
else if(vec[i]=="skr")result++;
else continue;
}
}return result;
}
int main() {
int n;
std::vector<std::string> vec;
std::cin>>n;
for (size_t i = 0; i < n; i++){
std::string s;
std::cin>>s;
vec.push_back(s);
}
int result = solution(n,vec);
std::cout<<result<<std::endl;
return 0;
}
直接使用一个map来存储数量,然后选出数量最大的就行。
#include
#include
#include
#include
#include
std::string solution(int n, std::vector<std::string>& vec){
std::string result;
// TODO:
std::map<std::string,int>mp;
for(size_t i=0;i<n;i++){
mp[vec[i]]++;
}int max_val = 0;
for(size_t i=0;i<n;i++){
if(mp[vec[i]]>max_val){
max_val = mp[vec[i]];
result=vec[i];
}
}
return result;
}
int main() {
int n;
std::vector<std::string> vec;
std::cin>>n;
for (size_t i = 0; i < n; i++){
std::string s;
std::cin>>s;
vec.push_back(s);
}
std::string result = solution(n,vec);
std::cout<<result<<std::endl;
return 0;
}
#include
#include
#include
#include
std::string solution(std::string str){
std::string result="";
// TODO:
int flag=0;
for(size_t i=0;i<str.size();i++){
if(!flag&&i>0&&i<str.size()-2&&str[i]=='a'&&str[i+1]=='t'){
result += '@';
flag=1;
i+=1;
}else if(i>0&&i<str.size()-3&&str[i]=='d'&&str[i+1]=='o'&&str[i+2]=='t'){
result+='.';
i+=2;
}else{
result+=str[i];
}
}
return result;
}
int main() {
std::string str;
std::cin>>str;
std::string result = solution(str);
std::cout<<result<<std::endl;
return 0;
}
这题求的是最长递增子数组的长度,所以直接双指针解决就行了,如果是求解最长递增子序列的长度的话可以使用动态规划。
#include
#include
#include
#include
int solution(int n, std::vector<int>& vec){
// TODO:
if(n<=1)return n;
int result = 1;
int start = 0;
int end = 1;
for(int i=1;i<n;i++){
if(vec[i]>vec[i-1]){
end++;
}else{
start=i;
end=i+1;
}
result = result>end-start?result:end-start;
}
return result;
}
int main() {
int n;
std::cin>>n;
std::vector<int> vec(n);
for(int i=0;i<n;i++){
std::cin>>vec[i];
}
int result = solution(n,vec);
std::cout<<result<<std::endl;
return 0;
}
经验心得
这次由于题目比较简单,所以题目本身其实不太有参考价值。不过做题角度来看的话,我觉得像CSDN这种核心代码模式的做题方式,首先需要搞清楚系统给定的输入输出,有时候还需要质疑系统给定的输入输出是否有问题,有问题的话可以重新按照题意直接自己写输入输出。
建议对于CSDN的竞赛系统,结合往期参加的感受来说,主要觉得有以下几点是可以改进的:
- 页面内自己代码之间的复制粘贴依旧会记录次数,这个体验不太好;
- 编译出错误后错误描述可以再清楚些,尽量像力扣那样易懂;
- 最后一点,也是每期都有人吐槽的一点,就是防作弊机制,每次看到排名前几的大神几分钟就完事,都不免让人觉得是不是有什么猫腻(当然不否认真的有这种超厉害的大神)。后期再举办的话感觉可以把限时进入时间缩短,例如10点半开考,那么开考15分钟后就进不了系统,类似这样的机制。
- 还有一点,电子书月卡奖励麻烦下次换过一种奖励吧,这个实在过于鸡肋。。。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)