CSDN 第 11 次竞赛题解
题解
T1
题面
最近小艺酱渐渐变成了一个圆滑的形状 - 球!! 小艺酱开始变得喜欢上球!小艺酱得到 n n n 个同心圆。
小艺酱对着 n n n 个同心圆进行染色。 相邻的圆范围内不能有相同的颜色。相隔一层的圆颜色相同。 小艺酱想知道圆最外层的那种颜色全部染了多
少?
思路
发现只有两种颜色,设最外层的那种颜色为 a a a ,另一种为 b b b 。
整个过程相当于先把最大的圆染成 a a a 颜色,再把次大的染成 b b b 颜色(会覆盖原来的颜色),再把第三大的染成 a a a 颜色……
由于是同心圆,可以直接算,圆的面积是 S = π r 2 S=\pi r^2 S=πr2 ,从大往小染色更新答案,同色加上,异色减去即可(x&1
相当于 x x x 除以 2 2 2 的余数)。
另,C++ 中的 π \pi π 可以使用 acos(-1)
。
代码
#include<bits/stdc++.h>
using namespace std;
#define f(i,j,k) for(register int i=j;i<=k;++i)
#define g(i,j,k) for(register int i=j;i>=k;--i)
int n,m,s,l;
int a[10101010];
double ans;
signed main(){cin>>n;f(i,1,n)cin>>a[i];sort(a+1,a+n+1);g(i,n,1){if((n-i)&1)ans-=a[i]*a[i];else ans+=a[i]*a[i];}printf("%.3lf",ans*acos(-1));return 0;
}
T2
题面
存在 n n n 个节点,目标节点在 m m m。 每个节点有自己的权值 a a a。 在权值 k k k 内(含 k k k 值)选择一个权值非 0 0 0 节点且与目标节点距离最近。
节点 i i i 与节点 j j j 的距离为 a b s ( i − j ) abs(i-j) abs(i−j)。
思路
枚举选择的节点,先判断是否符合要求,再更新答案,C++ 有自带的绝对值函数即题面中的 abs()
。
注意要输出的是最近的距离。
代码
#include<bits/stdc++.h>
using namespace std;
#define f(i,j,k) for(register int i=j;i<=k;++i)
#define g(i,j,k) for(register int i=j;i>=k;--i)
int n,m,s,l;
int a[20202020];
signed main(){cin>>n>>m>>s;l=-1e9;f(i,1,n)scanf("%lld",&a[i]);f(i,1,n)if(a[i]&&a[i]<=s){if(abs(l-m)>abs(i-m))l=i;}cout<<abs(l-m);return 0;
}
T3
题面
已知存在 n n n 个宝物,每个宝物都有自己的质量 m m m 和价值 v v v,在考虑选择宝物时只能选择总质量小于等于 M M M 的方案,请问在最
优方案下选择宝物,能获取到最大价值 V V V 是多少?
思路
经典 DP 题,设 d p i , j dp_{i,j} dpi,j 为选择前 i i i 个宝物,总质量恰好为 j j j ,能得到的最大价值。
由定义得到转移式 d p i , j = max { d p i − 1 , j , d p i − 1 , j − m i + v i } dp_{i,j}=\max\{dp_{i-1,j},dp_{i-1,j-m_i}+v_i\} dpi,j=max{dpi−1,j,dpi−1,j−mi+vi} ,注意特判边界。
另外,只要保证状态 d p i , a dp_{i,a} dpi,a不会向 d p i , b dp_{i,b} dpi,b转移就可以去掉第一维 i i i,一种方法是反着循环,详情见代码。
代码
#include<bits/stdc++.h>
using namespace std;
#define f(i,j,k) for(register int i=j;i<=k;++i)
#define g(i,j,k) for(register int i=j;i>=k;--i)
int n,m,s,l;
int dp[2020202];
signed main(){cin>>n>>m;f(i,1,n){cin>>s>>l;g(i,m,s)dp[i]=max(dp[i],dp[i-s]+l);}s=0;f(i,0,m)if(s<dp[i])s=dp[i];cout<<s;return 0;
}
T4
题面
有 N N N 个客人与足够多张的圆桌。主人安排每位客人坐在(任意)一张圆桌边,但是每位客人希望自己左右边上分别有一些空座位,不然会觉得害羞。
注意,如果一个客人所在的圆桌只有他一个人,那么他左边的空座位数量就是他右边的空座位数量。
试问主人需要准备多少个座位,才能让每个客人舒适的坐下。
思路
若已知第 i i i 个人左边坐着第 p i p_i pi 个人,那么答案就是 ∑ i = 1 n max { l i , r p i } \sum_{i=1}^{n}\max\{l_i,r_{p_i}\} ∑i=1nmax{li,rpi} 。
不可能有两个人左边坐着同一个人,所以 p p p 互不相同。
我们可以考虑一个贪心:
从 l l l 和 r r r 数组中找到一个最大的值 x x x,它一定会出现在求和中某次累加时(一定有 max { l i , r p i } = x \max\{l_i,r_{p_i}\} = x max{li,rpi}=x)。
如果 x x x 是从 l l l 中取到的,那么我们还需要从 r r r 中取一个作为它左边的人,显然取的这个越大越好,我们把这两个数删掉后继续 1. 找数。
如果 x x x 是从 r r r 中取到的, 那么我们还需要从 l l l 中取一个作为它右边的人,显然取的这个越大越好,我们把这两个数删掉后继续 1. 找数。
观察发现每次取的两个数就是两个数组排序后的 l i l_i li 和 r i ri ri。
考场上没过写了个模拟退火,最后发现答案值域为 1 0 13 10^{13} 1013 要开 long long
。
代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define f(i,j,k) for(register int i=j;i<=k;++i)
#define g(i,j,k) for(register int i=j;i>=k;--i)
int n,m,s,l;
int a[101010];
int b[101010];
signed main(){cin>>n;f(i,1,n)cin>>a[i]>>b[i];sort(a+1,a+n+1);sort(b+1,b+n+1);f(i,1,n)m+=1+max(a[i],b[i]);cout<<m;return 0;
}
建议
把 IDE 做好一点,代码自动补全和缩进及其反人类。
CSDN 第 11 次竞赛题解相关推荐
- 【竞赛经历】CSDN第39期竞赛题解
1 前言 第一次心血来潮参加CSDN的竞赛,看了一下往期的比赛,感觉不是很难,加上又可以用python解题,所以果断报了个名,没想到运气不错,近了前十,这里将根据我的答题报告来做个小结. 2 题解 ...
- CSDN第39期竞赛题解
1.题目名称:圆小艺 最近小艺酱渐渐变成了一个圆滑的形状-球!! 小艺酱开始变得喜欢上球! 小艺酱得到n个同心圆. 小艺酱对着n个同心圆 进行染色. 相邻的圆范围内不能有相同的颜色.相隔一层的圆颜色相 ...
- CSDN第九次竞赛题解与总结
CSDN第九次竞赛题解与总结 前言 T1小艺读书 题意 分析 T2鬼画符门之宗门大比 题意 分析 代码 别的方法 T3硬币划分 题意 分析 状态 转移方程 初始值 代码 T4饿龙咆哮-逃离城堡 题意 ...
- 第三届上海市青少年算法竞赛题解
第三届上海市青少年算法竞赛题解 T1 数洞洞 #include<bits/stdc++.h> using namespace std; int a[11]={0,1,0,0,0,1,0,1 ...
- 2020 年 “联想杯”全国高校程序设计在线邀请赛暨第三届上海理工大学程序设计竞赛题解
2020 年 "联想杯"全国高校程序设计在线邀请赛暨第三届上海理工大学程序设计竞赛题解 萌新又来写题解啦 原题链接 (不是按照题号顺序来的QWQ) L. Lottery Ticke ...
- 2019.11.03 test 题解
2019.11.03 test 题解 五指山 数星星 Stars 涂抹果酱 繁繁的数字 繁繁的游戏 繁繁的队列 大佬们不屑于写博客,于是最菜的我来写篇题解. Day1: Day1 AK... 五指山 ...
- 2019河北省大学生程序设计竞赛题解(一)
2019河北省大学生程序设计竞赛题解(一) B Icebound and Sequence G 点我 H 天神的密码 K 河北美食 L smart robot 下面是一些这次比赛的较简单题目的题解 题 ...
- 浙江中医药大学第十一届程序设计竞赛题解
官方题解:http://www.jnxxhzz.com/Article/article/9.html 2019: 特产 Time Limit: 1 Sec Memory Limit: 128 MB ...
- 2016CCPC东北地区大学生程序设计竞赛题解
以下所有AC题解程序来自"仙客传奇"团队. A. Minimum's Revenge AC的C++语言程序: #include<iostream> using name ...
最新文章
- 为什么要在linux命令前加上 ./
- 13、SpringBoot-CRUD员工修改操作/删除
- putty连接Linux
- 一个程序员的爱情故事
- 一、操作系统——处理机(作业)调度算法:先来先服务算法FCFS、最短作业优先算法SJF(非抢占式)、 最短剩余时间优先算法SRTN(抢占式)、最高响应比优先算法HRRN
- 线程 sleep 取消_C/C++ 多线程机制
- Java-jdk下载以前版本需要的账号
- html 中 float 的一些研究
- 深入浅出4G标准 LTE FDD和LTE TDD
- CRC8校验算法总结
- NerveBridge 助力 YF 和 Bingoo 社区实现资产跨链
- 学校学生计算机配备标准,规模控制在900人至5000人 每百名学生应有15台电脑
- cesium空间面积测量,取点比较准,数据不是很准,但是差不太多
- ai论文调研——PAMI Popular Articles (December 2015)
- 对uni-app框架的认识
- | JavaScript脚本注入,完成Selenium 无法做到的那些事
- STM32之震动传感器、继电器介绍及实战
- iOS 讯飞语音之语音听写 录音的实现
- 机器学习-5朴素贝叶斯
- MAC 系统环境下无法打开360加固助手的解决