CSDN第26期周赛赛后总结(第一次AK)

简介: 文章目录前言一、 等差数列1、题目描述2、思路分析3、代码详解二、阿波罗的魔力宝石1、题目描述2、思路分析3、代码详解三、任务分配问题1、题目描述2、思路分析3、代码详解四、单词逆序1、题目描述2、思路分析3、代码详解总结

前言

第一次AK,记录与反思一下。


一、 等差数列

1、题目描述

一个等差数列是一个能表示成a, a+b, a+2b,..., a+nb (n=0,1,2,3,...)的数列。在这个问题中a是一个非负的整数,b是正整数。 现给出三个整数,分别表示等差数列的第一项a、最后一项、公差b,求该 数列的和。

第一题给出首项,末项,公差,问是否可以构成等差数列,如果可以,输出从首项到末项的和,否则输出-1。


2、思路分析

如果可以构成等差,则说明首项和末项之间相差整数倍公差,所以据此来判断是否为等差数列,而数列和可以利用等差数列求和公式(首项+末项)*公差/2求得。

3、代码详解

#include <iostream>

using namespace std;

long long a,b,la;

int main(){

   cin>>a>>la>>b;

   int t=la-a;

   if(t%b==0){

   cout<<(a+la)*(t/b+1)/2;

   }

   else{

   cout<<-1;

   }

   return 0;

}


二、阿波罗的魔力宝石

1、题目描述

在希腊神话中,有一个神祗阿波罗。阿波罗拥有一枚能够使人变得更加聪明的神奇宝石。但是,这枚宝石的魔力被封印在 了一个混乱的顺序中,你需要通过排序的方法才能拥有这枚宝石的魔力。 给定一个长度为 N 的整数数组 A,请你将数组 A中的元素进行 冒泡排序。(该题目由CSDN用户【生产队的刘同学】提供)。


2、思路分析

直接无脑sort()了,输出排序序列即可。


3、代码详解

#include <iostream>

#include <algorithm>

using namespace std;

const int N=100010;

int n,a[N];

int main(){

   cin>>n;

   for(int i=0;i<n;i++){

       cin>>a[i];

   }

   sort(a,a+n);

   for(int i=0;i<n;i++){

       cout<<a[i]<<endl;

   }

  return 0;

}


三、任务分配问题

1、题目描述

小明手头上有n个问题,每个问题都有一个数值,表示这个问题的难度;正好小明团队有n个人,每个人都有一个数值,表示这个人的能力 现在小明要把这 n个问题分配给每个人,要求 能力更高的人分配到更高难度的问题。


2、思路分析

这道题是解题时间是最长的,办法也不是很好,但是过了。

方法:先将问题难度的序列从大到小排序,然后将输入的人和他们的编号存在了pair数组中(first存第几个人,second存能力大小),然后根据能力从大到小排序,如果能力相同,按first排序(均需要手写cmp函数)。然后依次遍历每个人,此时pair数组中能力是从大到小,而且如果能力相同也是按照输入顺序排的,所以此时依次将问题难度从大到小分配给他们即可,将每个人处理问题的难度,存入每个人的second中,最后再按每个人的first排序,最后按顺序输出每个人的second即可。


3、代码详解

#include <iostream>

#include <algorithm>

using namespace std;

typedef pair<int,int> PII;

const int N=100010;

int n,d[N];

PII p[N];

int cmpd(int A,int B){

   return A>B;

}

int cmpp(PII A,PII B){

   if(A.second==B.second){

      return A.first<B.first;

}

    return A.second>B.second;

}

int cmmp(PII A,PII B){

   return A.first<B.first;

}

int main(){

   cin>>n;

   for(int i=1;i<=n;i++){

       cin>>d[i];

    }

   sort(d+1,d+n+1,cmpd);

   for(int i=1;i<=n;i++){

       p[i].first=i;

       cin>>p[i].second;

   }

   sort(p+1,p+n+1,cmpp);

   for(int i=1;i<=n;i++){

       p[i].second=d[i];

    }

    sort(p+1,p+n+1,cmmp);

    for(int i=1;i<=n;i++){

        cout<<p[i].second<<endl;

     }

    return 0;

}


四、单词逆序

1、题目描述

对于一个字符串,请设计一个算法,只在字符串的单词间做逆序调整,也就是说,字符串由一些由空格分隔的部分组成,你需要将这些部分逆序。 给定一个原字符串A,请返回 逆序后的字符串。

例:

输入:I love you

输出:you love I

2、思路分析

输入用getline(),直接输入string变量,不接收空格。

方法:如果遇到空格就截取上一个空格到当前空格之间的字符串(需要有个变量来记录上一个空格的位置,初始化此变量为0),然后放进栈中。这时最后的一部分字符串没有放进栈中,需要单独操作。然后依次弹出,即是结果。


3、代码详解

#include <iostream>

#include <cstring>

#include <stack>

using namespace std;

const int N=10010;

string s,tmp;

stack<string> stk;

int k;

int main(){

   getline(cin,s);

   int ls=s.size();

   for(int i=0;i<ls;i++){

      if(s[i]==' '){

      tmp=s.substr(k,i-k);

      stk.push(tmp);

      k=i+1;

    }

   }

   tmp=s.substr(k,ls-k);

   stk.push(tmp);

   while(!stk.empty()){

        cout<<stk.top()<<' ';

        stk.pop();

   }

   return 0;

}



总结

对于基本输入输出技巧和STL相关操作还不是太熟练,例如getline()、pair等相关操作还需要多加练习。


目录
相关文章
|
云栖大会 开发者
收到阿里云【乘风者计划】博主证书和奖励
收到阿里云【乘风者计划】博主证书和奖励 2023年2月对我来说是一个很好的开端,因为我在1号就收到了阿里云寄给我的【乘风者计划】博主证书和奖励。好兆头啊! 我收到的是我获得的【技术博主】【星级博主】【专家博主】三个的奖品和证书,一快给我寄过来哒!
2805 2
收到阿里云【乘风者计划】博主证书和奖励
|
7月前
|
NoSQL Java 关系型数据库
阿里巴巴Github星标57.9KJava面试突击汇总(全彩版)首次公开
Java面试 现在互联网大环境不好,互联网公司纷纷裁员并缩减HC,更多程序员去竞争更少的就业岗位,整的IT行业越来越卷。身为Java程序员的我们就更不用说了,上班8小时需要做好本职工作,下班后还要不断提升技能、技术栈,才能从容应对现在互联网公司的面试! 但事实是:很多Java程序员,对自身是没有一个清楚的认知的,甚至不知道自己短板在哪?这样不做准备的就去面试,你肯定会离心仪的offer越来越远!我今天写这篇文章的意义就在于劝诫大家如果面试准备阶段没有方向的话,不妨暂时停下来,看一下自己怎么才能更加系统、有条理地去备战面试,建立起一个系统的查漏补缺体系;怎么才能从自己的实际出发,了解自身与互联
93 0
|
消息中间件 Dubbo Java
阿里、腾讯、美团春招真题“惨遭”泄露,Github上标星66.3K
黄金跳槽的高峰期已经到来,今年市场变得格外不同,比之前仅仅想涨薪、想换领导的基础因素上又加了两种情况;如受前两年疫情影响想跳槽未跳的,去年“双减”政策裁员的.....所以导致今年的市场更加火热;
阿里、腾讯、美团春招真题“惨遭”泄露,Github上标星66.3K
|
算法 开发工具 git
CSDN算法技能树测评
CSDN算法技能树测评
153 0
CSDN算法技能树测评
阿里云星级博主勋章
阿里云星级博主勋章
135 0
阿里云星级博主勋章
CSDN竞赛第六期第二题(C++)
鬼画符门,每年都会统计自己宗门鬼画符消耗的数量,往年一直是大师兄管理,但是这次鬼艺接手了,你能帮鬼艺写一个程序统计每年消耗数量最多的鬼画符吗? 注解(这题是一道找出出现次数最多的字符串的一道题目) 输入描述: 第一行输入整数n.(1<=n<=1000)以下n行输入n个字符串,代表消耗的鬼画符。 输出描述: 输出消耗数量最多的鬼画符(字符串),无需考虑多种鬼画符消耗数量相同的情况。 示例1 输入 5 red red green green hen 输出 red
161 0
|
Ubuntu 机器人 大数据
CS计算机专业的常用的竞赛和学习网站(最全汇总)-博主自用
CS计算机专业的常用的竞赛和学习网站(最全汇总)-博主自用
635 0