【CSDN竞赛第11期】编程竞赛总结
创始人
2024-04-16 05:44:56
0

文章目录

    • 前言/背景
    • 题目与解题代码
      • 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 
#include 
#include 
#include 
#include
#include
double solution(int n, std::vector& 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;iif(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 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<

还需要注意的是精度问题,题目要求精度是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

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

#include 
#include 
#include 
#include 
int solution(int n, int m, int k, std::vector& vec){int result=0;
// TODO:int start = m-1;int index1 = -10000;int index2=-10000;for(int i=start+1;iif(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 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<

3. 筛选宝物

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

第一行输入宝物的数量n(1 以下n行每行输入两个数m和v(1

输出描述:输出最优方案下能获取的最大价值V。
说明:v代表每个宝物自己的价值m代表每个宝物的质量V代表最大价值M代表总质量输入样例:5 10
2 3
5 3
4 5
6 2
4 2输出样例:10

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

#include 
#include 
#include 
#include 
int solution(int n, int M, std::vector>& vec){int result;
// TODO:std::vector>dp(n,std::vector(M+1,0));for(int j=vec[0][0];j<=M;++j){dp[0][j]=vec[0][1];}for(int i=1;ifor(int j=0;j<=M;j++){if(jdp[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> vec(n, std::vector(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 
#include 
#include 
#include 
int solution(int n, std::vector>& vec){int result=0;
// TODO:result+=n;for(int i=0;iif(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> vec(n, std::vector(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 
#include 
#include 
#include 
#include 
int solution(int n, std::vector>& vec){int result=0;
// TODO:std::vectorleft(n),right(n);for(int i=0;ileft[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;iresult+=std::max(left[i],right[i]);}return result;
} int main() {int n;std::cin >> n;std::vector> vec(n, std::vector(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;
}

相关内容

热门资讯

银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...