CF GLR24-C. Doremy‘s City Construction

news2024/10/6 6:01:55

CF原题链接

 题目大意:n个结点,每个结点有一个正数值。现在让你在n个点间进行边的连接,唯一限制条件是不能出现这种情况:如3个点A,B,C,且A<=B<=C,那么不能同时出现边(A,B)和边(B,C)。请问,最多可以连接多少条边。

分析:虽然题目用到图结构的点和边的概念,但是显然此题目和图结构的几大算法(最小树,最短路径,拓扑)没有什么关联。

此类题目首要任务是读懂题目,然后需要根据样例数据分析解法,好在CF题目通常都会给多组数据。先放一张草稿纸,做算法和数学题其实区别不大(都得用草稿纸作为我们的拓展内存使用)。不要关注草稿纸内容..........................和题解无关

在草稿纸上罗列下数据。介绍下个人的分析过程,分析过程和结论如下

首先我们应该将数据排序,值相同的记录在一起例如样例2的6个数字5 2 3 1 5 2

我们应该排序得到1 2 2 3 5 5

(1)如果两个点值相同,那么将这两点连边是特别不经济的,就是说如果A==B,如果边(A,B),那么A和B两个点都不能和其他任何点(无论大小)进行连边。只有一种情况才会连接值相同的点,那就是整个序列如样例4哪样,所有结点值相同,没有其他节点。

(2)如果有A<B,那么如果将A和B连边,那么所有比A小的都不能和A连,同样,所有比B大的不能和B连。但是比A小的和B连接没有问题,同样,比B大和A连接也不成问题。

这时发现实际A也是可以连接到[B,an]区间的所有点。

(3)那么A和B应该怎么选取呢?直觉上A和B应该是值相邻的结点,如果A和B之间还有其他结点,例如C,A<C<B,那么不选择C显然不对,因此C同样可以和a1,a2.....连接,同样可以和B连接(那么C不就是我们想要的那个A吗),所有在枚举A和B的时候,A,B必为相邻结点。

(4)其实第一次做答的时候我就直接按照上面分析1,2,3写代码提交通过了。后续进一步思考发现,枚举A和B实际上就是枚举A,简言之[a1,A]的所有结点都和[B,an]所有结点连边,而B就是A的下一个元素。因此,枚举结点A即可,A左侧所有结点和A右侧所有结点可以连边。

#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int main()
{
    ios::sync_with_stdio(0),cin.tie(0);
    long long i,j,t,n,a[200005];
    cin>>t;
    while(t--)
    {
        cin>>n;
        for(i=1;i<=n;i++)
            cin>>a[i];
        sort(a+1,a+n+1);
        a[n+1]=-1;/**< 特殊值,方便处理第n个元素 */
        long long ans=0,len=1;/**< 不开longlong会错哦 */
        for(i=2;i<=n+1;i++)
            if(a[i]!=a[i-1])/**< 枚举结点A,A和它下一个元素值不同,注意A是a[i-1] */
                ans=max(ans,(i-1)*(n-i+1));/**< 左边i-1个和右边n-i+1个元素都可以连边 */
        if(ans==0)/**< 处理所有值都相同的特殊情况 */
            ans=n/2;
        cout<<ans<<endl;
    }
    return 0;
}

有兴趣可以做下此次比赛1,2题,第1题是很有CF特色的题目。

 

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

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

相关文章

冯诺依曼体系和操作系统概念

Ⅰ. 冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系。 截至目前&#xff0c;我们所认识的计算机&#xff0c;都是有一个个的硬件组件组成 输入单元&#xff1a;包括键盘, 鼠标&#xf…

太详细了,在 Windows 上安装 PySpark 保姆级教程

在本文中&#xff0c;我将和大家一起学习如何在 Windows 上安装和运行 PySpark&#xff0c;以及如何使用 Web UI 启动历史服务器和监控 Jobs。 安装 Python 或 Anaconda 发行版 https://www.python.org/downloads/windows/ 从 Python.org 或 Anaconda 发行版 下载并安装 Pyth…

在win10和docker下安装DVWA

win10安装 DVWA下载地址https://github.com/digininja/DvWA/archive/master.zip 在phpstudy软件包下的www文件夹中新建一个文件夹名为dvwa&#xff0c;把DVWA-master压缩包解压进去 删除/dvwa/config文件夹下的config.inc.php.dist文件的.dist后缀 打开config.inc.php&#x…

接口测试(四)—— Requests库发送请求、Cookie、Session、UnitTest管理测试用例

目录 一、Requests库 1、Requests库安装和简介 1.1 简介 1.2 安装 1.3 查验 2、设置http请求语法 2.1 案例1 2.2 案例2 2.3 案例3 2.4 案例4 2.5 案例5 3、Cookie 3.1 Cookie简介 3.2 CookieSession认证方式 3.3 案例 4、Session 4.1 Session简介 4.2 Sessi…

Flask从入门到放弃二(请求与相应、Session的使用与源码分析、Flash闪现、异步说明、请求拓展、BluePrint蓝图)

文章目录一、请求与响应1&#xff09;请求对象2&#xff09;响应对象3&#xff09;前后端分离和混合二、Session的使用和原理1&#xff09;Session的使用2&#xff09;Session源码分析三、Flash闪现四、异步说明五、请求扩展六、BluePrint蓝图一、请求与响应 1&#xff09;请求…

中国移动ZN-M160G光猫超级密码破解 | 河南移动兆能光猫超管密码获取 | 中国移动光猫如何开启UPnP功能

文章目录1. 按2. 重设光猫超管密码3. 开启UPnP功能1. 按 首先应确保设备型号是ZN-M160G&#xff0c;这点可以通过观察光猫底部的铭牌或者访问http://192.168.1.1/查看网页标题&#xff0c;因为本教程是基于兆能的这款ZN-M160G光猫进行操作的&#xff0c;其他的光猫&#xff08…

微信小程序框架(四)-全面详解(学习总结---从入门到深化)

目录 路由_navigateTo 页面跳转 携带参数 返回上一级页面 路由_redirectTo 页面跳转 路由_reLaunch 页面跳转 路由_switchTab 实现 tabbar 页面跳转 交互_消息提示框 基本弹出框 常用属性 icon详情 hideToast 交互_ loading 提示框 基本实现 常用属性 交互_模…

这次我把Redis数据类型写出了花✿❀~~~

1. String 字符串是 Redis 最基本的数据类型&#xff0c;不仅所有 key 都是字符串类型&#xff0c;其它几种数据类型构成的元素也是字符串。注意字符串的长度不能超过 512M。 1.1 编码方式&#xff08;encoding&#xff09; 字符串对象的编码可以是 int &#xff0c;raw 或者…

1566_AURIX_TC275_电源管理_低功耗模式

全部学习汇总&#xff1a;GreyZhang/g_TC275: happy hacking for TC275! (github.com) Idle模式每一个核都可以单独进入&#xff0c;但是standby、sleep模式是会影响整个系统的。进入idle模式的几种方法&#xff1a;软件请求、其他的CPU进行软件请求、SMU因为报警等处理进行请求…

CSS -- 精灵图(sprites)的讲解及使用方法

文章目录精灵图(sprites)1 为什么使用精灵图2 精灵图的使用精灵图(sprites) 1 为什么使用精灵图 一个网页中往往会应用很多小的背景图像作为修饰&#xff0c;当网页中的图像过多时&#xff0c;服务器就会频繁地接收和发送请求图片&#xff0c;造成服务器请求压力过大&#xff…

ja3指纹 笔记

通过给openssl和nginx打补丁获取ja3指纹&#xff1a; https://github.com/phuslu/nginx-ssl-fingerprint 这个项目算出来的ja3指纹和wireshark的不完全一致&#xff0c;wireshark后面的是“-21,29-23-24,0”, 小小不同&#xff0c;&#x1f440;。。 通过wireshark查看ja3指…

Selenium Grid 分布式 | 介绍与实战

一. 介绍 Selenium 包含 3 大组件&#xff0c;分别是&#xff1a;Selenium IDE、Selenium WebDriver、Selenium Grid 其中&#xff0c;Selenium IDE 负责录制、回放脚本&#xff0c;模拟用户对页面的真实操作 Selenium WebDriver 提供 API 来操作浏览器&#xff0c;比如&…

vue面试考察知识点全梳理

一、简介 vue几个核心思想&#xff1a; 数据驱动组件化虚拟dom、diff局部最优更新 源码目录介绍 Vue.js 的源码在 src 目录下&#xff0c;其目录结构如下。 src ├── compiler # 编译相关 ├── core # 核心代码 ├── platforms # 不同平台…

速度百倍提升,高性能 Python 编译器 Codon 火了

众所周知&#xff0c;Python 是一门简单易学、具有强大功能的编程语言&#xff0c;在各种用户使用统计榜单中总是名列前茅。相应地&#xff0c;围绕 Python&#xff0c;研究者开发了各种便捷工具&#xff0c;以更好的服务于这门语言。 编译器充当着高级语言与机器之间的翻译官…

4.19 Cadence Allegro软件中应该如何按照系统模板去创建PCB封装?异形表贴焊盘应该如何创建?

笔者电子信息专业硕士毕业&#xff0c;获得过多次电子设计大赛、大学生智能车、数学建模国奖&#xff0c;现就职于南京某半导体芯片公司&#xff0c;从事硬件研发&#xff0c;电路设计研究。对于学电子的小伙伴&#xff0c;深知入门的不易&#xff0c;特开次博客交流分享经验&a…

js常用函数

一、特常用函数以及功能解释&#xff08;建议掌握&#xff09; 1、alert()函数&#xff1a;显示一个警告对话&#xff0c;如&#xff1a; alert(1111) 2、eval()函数&#xff1a;计算表达式的结果&#xff0c;如&#xff1a; alert(eval(11)) 3、confirm()函数&#xff1a;显…

3 面蚂蚁,一路过关斩将 成功拿到 offer 定级 P6,大厂面试雀食有点难

线上服务 CPU 很高该怎么做&#xff1f;有哪些措施可以找到问题 JDK 中有哪几个线程池&#xff1f;顺带把线程池讲了个遍 应尽量避免在 where 子句中使用!或<>操作符&#xff0c;否则将引擎放弃使用索引而进行全表扫描 SQL 索引的顺序&#xff0c;字段的顺序 查看 SQ…

缓存一致性解决方案

文章目录常见的缓存一致性解决方案双写模式失效模式两种模式的总结上述模式的改进常见的缓存一致性解决方案 这里的缓存一致性其实就是缓存中的数据和数据库中的数据如何保持一致. 这个问题根据具体的业务场景和需要解决起来略有差异,但是总体看以分为两类,双写模式和失效模…

C-Frost安装及Cassie计算样例

本文运行环境为&#xff1a;Matlab2021b/Mathematic 13/Ubuntu18.04 matlab安装mathematic安装 一、 C-Frost安装 1、安装ipopt 安装参考 2、执行NLP例子验证是否安装成功 官方步骤 1&#xff09;修改create_problem.m文件中的 FROST_PATH路径 2&#xff09;修改CMakeL…

写代码时记录的小技巧

本文是记录自己写代码时候遇到的一些感觉比较有用/有意思的技巧&#xff0c;怕自己忘了记录一下。如果有想要分享的思路/纠正改进的地方欢迎交流。 如何输出结果 (Verbose Trick) 有关类的输出 1. 如果想在**模型的 forward 中输出相关变量**&#xff0c;但又不希望反复输出影…