【CSDN竞赛第11期】编程竞赛总结

news2024/10/3 2:17:32

文章目录

    • 前言/背景
    • 题目与解题代码
      • 1. 圆小艺
      • 2. K皇把妹
      • 3. 筛选宝物
      • 4. 圆桌

CSDN编程竞赛报名地址:https://edu.csdn.net/contest/detail/16

前言/背景

目前已经连续参加10次CSDN的编程竞赛了,这种比赛挺有意义,希望一直举办下去!
在这里插入图片描述

题目与解题代码

本次题目与往常一样有四个,这边贴出我当时的解题代码。

1. 圆小艺

在这里插入图片描述

输入描述:

第一行输入整数n.(1<=n<=1000)表示圆的数量。
第二行输入n个圆的半径。(1<=r<=1000)

输出描述:

输出染色面积,保留小数点后3位。

输入样例:

3
1 2 3

输出样例:

18.849

这题乍一看以为是染色问题,但仔细一想比染色问题简单多了。只需要记录下奇数层圆环的面积和偶数层圆环的面积,然后判断最外层属于偶数层还是奇数层即可。

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include<algorithm>
#include<iomanip>
double solution(int n, std::vector<int>& vec){
    sort(vec.begin(),vec.end());
    double result;
    double PI =3.14159265354;
// TODO:
    double ji_area = 0.0;
    double ou_area = 0.0;
    for(int i=0;i<n;i++){
        if(i%2==0){
            if(i==0){
                ou_area+=PI*vec[i]*vec[i];
            }else{
                ou_area+=PI*(vec[i]*vec[i]-vec[i-1]*vec[i-1]);
            }
        }if
                (i%2!=0){
            ji_area+=PI*(vec[i]*vec[i]-vec[i-1]*vec[i-1]);
        }
    }if
            (n%2==0){
        result=ji_area;
    }else{
        result=ou_area;
    }return result;
} int main() {
    int n;
    std::vector<int> vec;
    std::cin>>n;
    std::string line_0, token_0;
    getline(std::cin >> std::ws,line_0);
    std::stringstream tokens_0(line_0);
    while(std::getline(tokens_0, token_0, ' ')){
        vec.push_back(std::stoi(token_0));
    }
    double result = solution(n,vec);
    std::cout<<std::fixed<<std::setprecision(3)<<result<<std::endl;
    return 0;
}

还需要注意的是精度问题,题目要求精度是3位小数,所以 π \pi π需要尽可能地取得精确点。

2. K皇把妹

在这里插入图片描述

输入描述:

第一行输入整数n,m,k.(1<=n,m,k<=100)
第二行输入n个整数的权值。(1<=a<=1000)

输出描述:

输出最小距离

输入样例:

7 3 50
62 0 0 0 99 33 22

输出样例:

3

这题也很简单,从节点 m m m分别向左、向右找满足条件的值即可。

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
int solution(int n, int m, int k, std::vector<int>& vec){
    int result=0;
// TODO:
    int start = m-1;
    int index1 = -10000;
    int index2=-10000;
    for(int i=start+1;i<n;i++){
        if(k>=vec[i]&&vec[i]>0){
            index1=i;
            break;
        }
    }
    for(int i=start-1;i>=0;i--){
        if(k>=vec[i]&&vec[i]>0){
            index2=i;
            break;
        }
    }
    result = abs(start-index1)>abs(start-index2)?abs(start-index2):abs(start-index1);
    return result;
} 
int main() {
    int n;
    int m;
    int k;
    std::vector<int> vec;
    std::cin>>n;
    std::cin>>m;
    std::cin>>k;
    std::string line_0, token_0;
    getline(std::cin >> std::ws,line_0);
    std::stringstream tokens_0(line_0);
    while(std::getline(tokens_0, token_0, ' ')) {
        vec.push_back(std::stoi(token_0));
    }
    int result = solution(n, m, k,vec);
    std::cout<<result<<std::endl;
    return 0;
}

3. 筛选宝物

在这里插入图片描述
输入描述:

第一行输入宝物的数量n(1<n<100)和可选择宝物的总质量M(0<=M<=1000)。
以下n行每行输入两个数m和v(1<m<100, 1<v<100),表示这n个宝物其各自的重量和价值。

输出描述:

输出最优方案下能获取的最大价值V。
说明:

v代表每个宝物自己的价值

m代表每个宝物的质量

V代表最大价值

M代表总质量

输入样例:

5 10
2 3
5 3
4 5
6 2
4 2

输出样例:

10

这是一道经典的背包问题。背包问题的讲解非常推荐看代码随想录。

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
int solution(int n, int M, std::vector<std::vector<double>>& vec){
    int result;
// TODO:
    std::vector<std::vector<double>>dp(n,std::vector<double>(M+1,0));
    for(int j=vec[0][0];j<=M;++j){
        dp[0][j]=vec[0][1];
    }
    for(int i=1;i<n;i++){
        for(int j=0;j<=M;j++){
            if(j<vec[i][0])dp[i][j]=dp[i-1][j];
            else{
                dp[i][j]=dp[i-1][j]>dp[i-1][j-vec[i][0]]+vec[i][1]?dp[i-1][j]:dp[i-1][j-vec[i][0]]+vec[i][1];
            }
        }
    }
    result = dp[n-1][M];
    return result;
} 
int main() {
    int n;
    int M;
    std::cin >> n;
    std::cin >> M;
    std::vector<std::vector<double>> vec(n, std::vector<double>(2));
    for (int i = 0; i < n; i++) {
        std::cin >> vec[i][0] >> vec[i][1];
    }
    int result = solution(n, M, vec);
    std::cout << result << std::endl;
    return 0;
}

4. 圆桌

在这里插入图片描述

输入描述:

第一行输入一个整数N,(1<=N<=10000),代表客人的数量
接下来N行,每行两个整数li与ri,(1<=i<=N,1<=li<=ri<=1000000000)
代表第i位客人希望左边有li个空座位,右边有ri个空座位。

输出描述:

输出一个整数,代表主人需要准备的最少座位数量。

输入样例:

3
1 1
1 1
1 1

输出样例:

6

这一题对我来说难度挺高,我也不知道怎么做。。所以当时用非常投机取巧的方式过了 40 % 40\% 40%

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
int solution(int n, std::vector<std::vector<int>>& vec){
    int result=0;
// TODO:
    result+=n;
    for(int i=0;i<vec.size();i++){
        if(vec[i][0]>vec[i][1]){
            result+=vec[i][0];
        }else{
            result+=vec[i][1];
        }
    }
    return result;
} int main() {
    int n;
    std::cin >> n;
    std::vector<std::vector<int>> vec(n, std::vector<int>(2));
    for (int i = 0; i < n; i++) {
        std::cin >> vec[i][0] >> vec[i][1];
    }
    int result = solution(n, vec);
    std::cout << result << std::endl;
    return 0;
}

后面看别人题解时说是一道原题,原题出处戳此,属于贪心题型。

正确解法如下:

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>
int solution(int n, std::vector<std::vector<int>>& vec){
    int result=0;
// TODO:
    std::vector<int>left(n),right(n);
    for(int i=0;i<n;i++){
        left[i]=vec[i][0];
        right[i]=vec[i][1];
    }

    sort(left.begin(),left.end());
    sort(right.begin(),right.end());
    result = n;
    for(int i=0;i<n;i++){
        result+=std::max(left[i],right[i]);
    }

    return result;
} int main() {
    int n;
    std::cin >> n;
    std::vector<std::vector<int>> vec(n, std::vector<int>(2));
    for (int i = 0; i < n; i++) {
        std::cin >> vec[i][0] >> vec[i][1];
    }
    int result = solution(n, vec);
    std::cout << result << std::endl;
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/54202.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JDBC 访问数据库

文章目录一、实验目的二、实验要求三、实验内容1、设计数据库表2、定义实体类3、定义数据库连接类4、实现数据库的增删改查5、测试用例一、实验目的 理解 JDBC 的工作原理&#xff0c;掌握 JDBC 访问数据库&#xff1b; 掌握常见数据库 MYSQL &#xff1b; 二、实验要求 理解…

【华为上机真题 2022】字符串序列判定

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

中断系统中的设备树__中断号的演变与irq_domain

1 中断号与硬件相关_号码固定 当我们的系统中只有一两个中断控制器时&#xff0c;上面的方法很有用&#xff0c;可以给每一个中断预先确定好他的虚拟中断号&#xff0c;但是当中断控制器越来越多、当中断越来越多&#xff0c;上述方法(virq和hwirq固定绑定)有缺陷: a. 增加工作…

马克思的手稿-第11届蓝桥杯Scratch选拔赛真题精选

[导读]&#xff1a;超平老师计划推出Scratch蓝桥杯真题解析100讲&#xff0c;这是超平老师解读Scratch蓝桥真题系列的第92讲。 蓝桥杯选拔赛每一届都要举行4~5次&#xff0c;和省赛、国赛相比&#xff0c;题目要简单不少&#xff0c;再加上篇幅有限&#xff0c;因此我精挑细选…

23软考备考已开始,网络工程师知识点速记~(2)

新一轮软考备考来啦~ 为了帮助大家提高备考效率&#xff0c;将2023上半年软考网络工程师知识点速记分享给大家&#xff0c;快来跟着一起打卡学习吧&#xff01; 指令系统 指令系统是中央处理器所有指令的集合&#xff0c;通常一条指令可分解为操作码和地址码两部分&#xff…

python 从一道作业题到制作一个图形界面的“诈金花”游戏

题目很简单&#xff1a;就是自己写一个程序&#xff0c;实现诈金花游戏的发牌、判断输赢。 规则&#xff1a; 一付扑克牌&#xff0c;去掉大小王&#xff0c;每个玩家发3张牌&#xff0c;最后比大小&#xff0c;看谁赢。 牌型&#xff1a; 豹子&#xff1a;三张一样的牌&am…

Fluent案例:肾动脉RDN治疗过程的仿真

1 问题背景 肾动脉消融&#xff08;Renal denervation&#xff0c;简称RDN&#xff09;是一种治疗高血压的办法&#xff0c;其基本原理为利用插入肾动脉的电极消融导管进行射频消融&#xff0c;使肾动脉血管壁附近的交感神经因高温而损伤失活&#xff0c;减少神经系统过度活跃的…

想转行做IC,却找不到适合自己的岗位?

想跨行从事IC行业&#xff0c;但是没有一个比较好的学历&#xff0c;也没有一个很好的专业&#xff0c;或者受限于各种各样的外在条件&#xff0c;那么在这个行业里面&#xff0c;到底有没有个岗位能够适合自己上手呢&#xff1f; 当然有&#xff0c;不是所有芯片岗位都要高学…

什么是自监督,自监督和有监督的区别什么是SSL

有监督 就是让机器做题目&#xff0c;给他标准答案 那无监督 可以自己推出来的吧 就是没有给标准答案 也就是label 或者在目标检测里面说是groundTruth 什么是Ground-truth&#xff0c;Ground-truth什么意思_&#xff1a;&#xff09;&#xfffd;东东要拼命的博客-CSDN博客_…

基于日特征气象因素的支持向量机预测电力负荷(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

tkinter绘制组件(37)——普通图片

tkinter绘制组件&#xff08;37&#xff09;——普通图片引言布局函数结构添加图片图片缩放完整函数代码效果测试代码最终效果github项目pip下载结语引言 其实&#xff0c;本来不打算专门为TinUI写图片元素控件的&#xff0c;让编写者自行使用PhotoImage类和画布自带的create_…

[附源码]JAVA毕业设计计算机类课程实验平台(系统+LW)

[附源码]JAVA毕业设计计算机类课程实验平台&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目…

【编程题】【Scratch一级】2022.09 踢足球

踢足球 1. 准备工作 &#xff08;1&#xff09;选择背景Baseball 2&#xff1b; &#xff08;2&#xff09;删除默认的小猫角色&#xff0c;选择角色Ben和Soccer Ball。 2. 功能实现 &#xff08;1&#xff09;Ben初始造型为ben-a&#xff0c;初始位置为舞台左下角&#xf…

开发3年入职饿了么P6,全靠这份MyBatis学习笔记了

前言 相信大部分程序员工作中都有接触过MyBatis&#xff0c;那么它到底重不重要呢&#xff1f;答案是肯定的呀&#xff01; 互联网公司基本都是用Mybatis做为持久层框架的&#xff0c;所以&#xff0c;Mybatis是一定要学的&#xff01;&#xff01;&#xff01; 不管是在工作中…

[附源码]Python计算机毕业设计Django公共台账管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

PMP项目管理中的各种图

直方图 柱状图,条形图,用来统计 帕累托图 就是把直方图进行排序 散点图 分析2个元素之间的相关性 矩阵图 在行列交叉的位置展示因素、原因和目标之间的关系强弱

10 个你必须要知道的重要JavaScript 数组方法

数组方法在 JavaScript 中是必不可少的&#xff0c;数组方法有很多。对于忙碌的初学者&#xff0c;我选择了 10 种最常见的数组方法&#xff0c;你必须学习它们&#xff0c;这些可以帮助你提升学习效率&#xff0c;节省时间。 为了便于理解&#xff0c;我为每个数组方法提供了…

不强迫登录!Apipost用着真爽!

Apipost在上个版本推出了Apipost网页版&#xff0c;用户无需下载软件在官网就可以直接体验到Apipost的很多强大功能。 Apipost 7版本在使用网页版时的登录问题上&#xff0c;让用户在无需下载的基础上&#xff0c;更无需登录&#xff0c;就可以便捷使用Apipost更多的功能&…

Promise期约函数的实现

前言 Promise也叫期约函数,是ES6中新增的特性,是解决异步编程的一种方案,取代回调函数避免回调地狱。 const p new Promise((resolve,reject)>{resolve(1); });// 链式调用 p.then(res > Promise.resolve(res 2)).then(res > Promise.resolve(res 3)).then(res &…

嵌入式系统硬件概述

文章目录嵌入式系统硬件平台(1) 嵌入式处理器的分类(2) 嵌入式微处理器MIPS处理器PowerPC处理器ARM处理器ARM发展历史ARM公司介绍ARM市场份额嵌入式微控制器&#xff08;MCU&#xff09;数字信号处理器&#xff08;DSP&#xff09;嵌入式片上系统&#xff08;SoC&#xff09;嵌…