Bessie‘s Birthday Cake (Hard Version)

2024-04-03 17:12

本文主要是介绍Bessie‘s Birthday Cake (Hard Version),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接

CodeTON Round 8 (Div. 1 + Div. 2, Rated, Prizes!)

C2. Bessie’s Birthday Cake (Hard Version)


思路:

其实可以先做一下easy version。

先不选点,已有的点我们肯定能加多少边就加多少,而且手玩后发现一个规律,就是不管我们怎么加边,总的加边数量和产生的三角形个数是固定的,只和点的个数有关。点的个数-2=三角形个数。

我们把已有的点的外围边画出来,这就相当于一个多边形,多边形内部已经拆出了足够多的三角形,我们不需要管了,看外部剩下的边角料。
在这里插入图片描述
手玩几个发现一个规律,那就是剩下的这个 n + 2 n+2 n+2 边形,两个点我们已有,剩下的点每隔一个点选一个点,一下可以拆出两个三角形(大概如下图,绿色点已有,黄色点是选择的点),剩下的部分同理接着向下拆。不过最后收尾的时候,如果 n = 1 n=1 n=1,就不需要切了,剩下的直接就是一个三角形,如果 n = 2 n=2 n=2,还需要选一个点。
在这里插入图片描述
这样,一个 n + 2 n+2 n+2 边形选择 ⌊ n 2 ⌋ \left\lfloor\dfrac n2\right\rfloor 2n 个点,可以切成 n n n 个三角形。

这样,我们选一个点至少可以得到两个三角形,而且当 n n n 为奇数时,我们收尾的时候还可以白嫖一个三角形。因此我们优先贪心地去切边数较小奇数边多边形,这样得到三角形的个数就是最多的。反正切一刀固定得到两个三角形,在这个基础上尽可能多的白嫖即可。

code:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <set>
using namespace std;
typedef long long ll;
const int maxn=2e5+5;int T,n,x,y,a[maxn];
ll ans=0;int main(){cin>>T;while(T--){cin>>n>>x>>y;ans=max(0,x-2);for(int i=1;i<=x;i++)cin>>a[i];sort(a+1,a+x+1);a[x+1]=a[1]+n;multiset<int> S1,S2;for(int i=2,t;i<=x+1;i++){t=a[i]-a[i-1]-1;if(t&1)S1.insert(t);else S2.insert(t);}for(auto t1:S1){if(y>=t1/2){y-=t1/2;ans+=t1;}else {ans+=2*y;y-=y;break;}}for(auto t2:S2){if(y>=t2/2){y-=t2/2;ans+=t2;}else {ans+=2*y;y-=y;break;}}cout<<ans<<endl;}return 0;
}

这篇关于Bessie‘s Birthday Cake (Hard Version)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/873496

相关文章

CF629D Babaei and Birthday Cake

题意:给出N个半径,和高的圆柱,要求后面的体积比前面大的可以堆在前一个的上面,求最大的体积和。 dp[i]=max(dp[j])+v[i](j<i&&v[i]>v[j]); 离散化,线段树维护区间最大值 import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免

Jenkins 通过 Version Number Plugin 自动生成和管理构建的版本号

步骤 1:安装 Version Number Plugin 登录 Jenkins 的管理界面。进入 “Manage Jenkins” -> “Manage Plugins”。在 “Available” 选项卡中搜索 “Version Number Plugin”。选中并安装插件,完成后可能需要重启 Jenkins。 步骤 2:配置版本号生成 打开项目配置页面。在下方找到 “Build Env

Learn ComputeShader 09 Night version lenses

这次将要制作一个类似夜视仪的效果 第一步就是要降低图像的分辨率, 这只需要将id.xy除上一个数字然后再乘上这个数字 可以根据下图理解,很明显通过这个操作在多个像素显示了相同的颜色,并且很多像素颜色被丢失了,自然就会有降低分辨率的效果 效果: 但是这样图像太锐利了,我们加入噪声去解决这个问题 [numthreads(8, 8, 1)]void CSMain(uint3 id

HDU 1097 A hard puzzle(规律)

题目: http://acm.hdu.edu.cn/showproblem.php?pid=1097 题意: 求a的b次方的最后一位。 题解: 直接从例子入手, 第一组数据 7 66,结果如下(只要最后一位所以模10) 7 9 3 1 7 9··· 循环节为4,即结果在4个数值内循环出现。 第二组数据 6 800,结果如下 6 6 6 6··· 循环节为1 ···

Unsupported major.minor version 52.0 错误解决方法

自己前些天的项目突然出现这个问题,经过仔细排查,发现有两个原因都会导致这个问题。 第一个就是POM文件中的dependency重复,如果使用的是maven导入,重复写入dependency就会出现该错误。 第二个是版本不匹配,即所引用的jar包太新,并不匹配你的jdk,因为我们正常用的都是jdk7,但是现在已经更新到jdk10了,好多最新版本最新版本的jar包都是基于最新的jdk编写,所以可以

#error: Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version

昨天编译文件时出现了Building MFC application with /MD[d] (CRT dll version)requires MFC shared dll version~~~~的错误。   在网上很容易找到了解决的方案,公布如下:   对着你的项目点击右键,依次选择:属性、配置属性、常规,然后右边有个“项目默认值”,下面有个MFC的使用,选择“在共享 DLL 中使

EasyConnect 现实 Harfbuzz version too old 解决方案

https://www.cnblogs.com/cocode/p/12890684.html

Update Azure OpenAI npm Package to 2023-12-01-preview Version

题意:将 Azure OpenAI npm 包更新到 2023-12-01-preview 版本 问题背景: I am currently using the azure-openai npm package in my project with version 2023-03-15-preview. As per the latest updates, version 2023-12