CodeForces730E Award Ceremony(拓扑排序+结论)

CF730E. Award Ceremony

  • problem
  • solution
  • code

problem

题目链接

题目大意:

给出 nnn 个队封榜时的榜单 aia_iai 和揭榜时的变化情况 did_idi

揭榜时,这个队的名次会变化 tit_iti

注意在别的队揭榜时,自己队的排名也是动态变化的。

计算的变化名次是自己揭榜前后的名次差,而非最终排名与最初排名差。

然后问如何安排揭榜顺序,使得 sum(∣ti∣)sum(|t_i|)sum(ti) 最大。

1≤n≤100,1≤ai≤100,−100≤di≤1001≤n≤100,1≤ai≤100, -100≤di≤1001n1001ai100,100di100

solution

考虑两两队伍之间的排名变化贡献。

  • 如果两个队伍揭榜前后相对排名顺序发生变化,则无论怎么安排两个队伍的揭榜先后,答案贡献都是 111

    i.e. 假设 iii 排名在 jjj 前面(i<ji<ji<j),揭榜后 jjj 排名更靠前 i>ji>ji>j

    有两种情况。

    • iii 分数下降,jjj 可能上升也可能下降,但 iii 一定下降地更猛。
      • 假设先揭榜 iii ,则 iii 排名变成 jjj 后面,贡献为 111,后面揭榜 jjj,依旧在 iii 之前。
      • 假设先揭榜 jjj,则 jjj 可能已经超过 iii ,后面揭榜仍在 iii 前面;也可能还是没有超过 iii,但是 iii 揭榜后就掉在 jjj 后面了。
    • iii 分数上升,jjj 必须上升,且 jjj 一定上升地更猛。假设揭榜过程与上面一样。不再赘述。
  • 如果两个队伍揭榜前后相对顺序并未发生改变。则有两种情况。

    • 不管先揭榜谁,都保持着 i<ji<ji<j。则对答案无贡献。
    • iiijjj 超过后又再次超过了 jjj。答案就是 222

按照上述方法会得到一个有向无环图,根据拓扑排序就能得到揭晓的顺序,但是本题并未做要求。

只要最终改变的最大值结果,那么就直接枚举两个队伍,看属于上面的哪种情况贡献。计算即可。

时间复杂度为 O(n2)O(n^2)O(n2)

证明这样的做法得到的关系图不存在环。

只有第二种情况的第二点,贡献为 222,这种 case 会需要考虑两个队伍揭榜的先后顺序。

即只有这种 case 才会在图上增加一条边,因此环只可能在这个地方产生。

假设三个队伍 i,j,ki,j,ki,j,k 构成环。

首先因为两个队伍之间有边,所以有 iii 揭榜后能超过 jjj ,然后又被 jjj 揭榜后反超,这样贡献才为 222

(j,k),(k,i)(j,k),(k,i)(j,k),(k,i) 同样也是如此。

jjj 揭榜后超过 kkk 又被 kkk 反超,kkk 揭榜后超过 iii 又被 iii 反超。

这三个揭榜顺序必然是确定的,所以名次改变方向是固定的。

(i,j)(j,k)(i,j)(j,k)(i,j)(j,k) 之间的关系就知道 kkk 揭榜后超过 i,ji,ji,j 不可能又让 iii 再揭榜一次反超。

所以这个情况必然是如图所示:

在这里插入图片描述

code

#include <bits/stdc++.h>
using namespace std;
#define maxn 105
struct node { int val, id, tag;bool operator < ( node &t ) {return val == t.val ? id < t.id : val > t.val;}
}a[maxn];
int n, ans;int calc( int x, int y ) {node lst_x = a[x], lst_y = a[y];node new_x = lst_x, new_y = lst_y;new_x.val += lst_x.tag;new_y.val += lst_y.tag;if( lst_x < lst_y and new_y < new_x ) return 1;if( lst_y < lst_x and new_x < new_y ) return 1;if( lst_x < lst_y and new_x < new_y and new_y < lst_x ) return 2;if( lst_x < lst_y and new_x < new_y and lst_y < new_x ) return 2;if( lst_y < lst_x and new_y < new_x and new_x < lst_y ) return 2;if( lst_y < lst_x and new_y < new_x and lst_x < new_y ) return 2;return 0;
}int main() {scanf( "%d", &n );for( int i = 1;i <= n;i ++ ) scanf( "%d %d", &a[i].val, &a[i].tag ), a[i].id = i;sort( a + 1, a + n + 1 );for( int i = 1;i <= n;i ++ )for( int j = i + 1;j <= n;j ++ )ans += calc( i, j );printf( "%d\n", ans );return 0;
}

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

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

相关文章

.Netcore 2.0 Ocelot Api网关教程(番外篇)- Ocelot v13.x升级

由于Ocelot系列博客好久没更新&#xff08;差不多有10个月的时间了&#xff09;&#xff0c;在此先说声抱歉&#xff0c;Ocelot系列会继续更新下去。在写上一篇配置管理的时候发现官方文档已经和以前的不一样&#xff0c;而Ocelot也从5.0版本更新到了13.x版本&#xff0c;进行了…

CF765F Souvenirs(暴力、线段树)

解析 比较神奇的一道题。 考虑一个常规套路&#xff1a;把询问离线&#xff0c;移动右端点&#xff0c;维护左端点答案。 考虑暴力维护&#xff0c;对于当前的 aixa_ixai​x&#xff0c;左侧如图所示的这两条线上的点都可以产生新的可能答案。 容易构造使得单次产生的新点是…

Hard Disk Drive HDU - 4788

Hard Disk Drive HDU - 4788 题意&#xff1a; 通常制造商认为1“kilo”等于1000&#xff0c;但操作系统会认为是1024。 因此&#xff0c;当你购买了一个100MB的硬盘&#xff0c;电脑却只显示大约有95MB&#xff0c;这缺失了大约5MB。 对于硬盘的大小&#xff0c;有多种单位描…

货币系统(二分)

problem 【题目描述】 你在 NOIP 2018 的赛场上遇到了「货币系统」一题。你没有写出这题&#xff0c;导致网友的国度简化货币系统的任务失败了。网友的国度的货币系统现在十分混乱。 网友的国度现今有两套货币系统「忘忧」和「网游」。为了方便使用&#xff0c;它们有一个共用…

ASP.NET Core 沉思录 - 环境的思考

我的博客换新家啦&#xff0c;新的地址为&#xff1a;https://clrdaily.com :-D今天我们来一起思考一下如何在不同的环境应用不同的配置。这里的配置不仅仅指 IConfiguration 还包含 IWebHostBuilder 的创建过程和 Startup 的初始化过程。0 太长不读环境造成的差异在架构中基本…

区域赛铜牌专题(一)

区域赛铜牌专题 题号题目知识点HDU 5532Almost Sorted Array贪心,LISHDU 5533Dancing Stars on MeHDU 5536Chip FactoryHDU 5538House BuildingHDU 5510BazingaHDU 5512PagodasHDU 4788Hard Disk DriveHDU 4821String计蒜客 42405TriangleHDU 4810Wall PaintingHDU 4771Steali…

P3581 [POI2015] CZA(状压)

解析 不能在一条思路上死磕&#xff01; 首先这题真正考的其实就是 p3p3p3。 乍一看题意&#xff1a;给出一张特殊图&#xff0c;求哈密顿回路方案数。 然后发现这个图性质不咋地。 然后就不会了。 … 正解根本和哈密顿回路毛关系也没有&#xff01; 考虑从1-n依次插入。 注…

[Wf2011]Chips Challenge(最小费用最大流)

[Wf2011]Chips Challengeproblemsolutioncodeproblem BZOJ2673 solution . 首先得知道这是网络流&#xff0c;但真的看不出来啊&#xff01;&#xff01;我真的郁闷啊(&#xffe3;﹏&#xffe3;&#xff1b;) 在知道做法是网络流后&#xff0c;初读题&#xff0c;肯定会…

深度:从 Office 365 新图标来看微软背后的设计新理念

开始表演请关注我的公众号“寒树Office”来获取一些新鲜而有趣的新闻与知识&#xff0c;最近又有两家俱乐部上线了&#xff08;东莞与长沙&#xff09;&#xff0c;俱乐部的活动告一段落&#xff0c;接下来的日子里我将持续与大家分享 Office 365 的精彩内容&#xff0c;这次很…

BZOJ4294 : [PA2015]Fibonacci(dfs、暴力、数位dp)

解析 新定义数位dp了属于是。 结论&#xff1a;斐波拉契在模 10m10^m10m 的意义下循环节为 6*10^m。 但这个不一定是最小循环节&#xff0c;我自己做的时候打表得出来的循环节更小。 考虑从低到高枚举周期中的位置&#xff0c;暴力check合法进行剪枝。 跑的飞快&#xff0c;O…

Chip Factory HDU - 5536

Chip Factory HDU - 5536 题意&#xff1a; 给你n个数&#xff0c;让你从中选出i&#xff0c;j&#xff0c;k三个下标&#xff0c;求最大的 &#xff08;a[i]a[j]&#xff09;^ a[k] 题解&#xff1a; 这种查找最大异或一般有两个方向&#xff0c;一个是有公式推导规律可循…

AtCoder Regular Contest 061 E - Snuke‘s Subway Trip(建图 + dijkstra最短路 / 0/1bfs / 并查集)

AtCoder Regular Contest 061 E - Snuke’s Subway Trip problem 洛谷翻译 my idea 最近一直在做网络流&#xff0c;所以一读这题后&#xff0c;我就想到了最小费用流。 首先的问题就是建边问题。 不同线路到达同一个点从而引发后面的费用是相互独立的&#xff0c;不能由…

NET Core微服务之路:实战SkyWalking+Exceptionless体验生产下追踪系统

前言当一个APM或一个日志中心实际部署在生产环境中时&#xff0c;是有点力不从心的。比如如下场景分析的问题&#xff1a;从APM上说&#xff0c;知道某个节点出现异常&#xff0c;或延迟过过高&#xff0c;却不能及时知道日志反馈情况&#xff0c;总不可能去相应的节点上一个一…

HDU5519:Kykneion asma(容斥)

计数的核心是双射。 解析 这也叫数位dp呗… 首先&#xff0c;这个题目的形式很容易令人想到硬币购物&#xff0c;考虑用容斥解决&#xff0c;暴力枚举强制超额的数的集合然后分别计算贡献。 然而&#xff0c;暴力dp计算贡献的复杂度是 O(n2)O(n^2)O(n2) 的。 考虑换一种统计…

Dancing Stars on Me HDU - 5533

Dancing Stars on Me HDU - 5533 题意&#xff1a; LYD又来了&#xff0c;这次他碰到了一个小问题&#xff0c;给定n个点&#xff0c;点的坐标为均为整数&#xff0c;问这些点能否组成正多边形&#xff1f; 题解&#xff1a; 如果是正多边形&#xff0c;那中心的坐标就是所…

[HDU 3625] Examining the Rooms(第一类斯特林数)

Examining the Roomsproblemsolutioncodeproblem hdu 3625 solution 之前考试有一道题&#xff1a;最多砸开 kkk 扇门&#xff0c;采取最有操作&#xff0c;求把 nnn 个门都打开的方案数。 本题稍稍多了一个不能砸开第一扇门的限制&#xff0c;以及求的是概率。 概率好说&…

P5801 [SEERC2019]Game on a Tree(博弈论)

解析 一直在路径可逆上做功夫&#xff0c;跑偏了。 题目可以转化为一个模型&#xff1a;给出一张无向图&#xff0c;每次可以移动到未移动过的点上&#xff0c;不能移动者判负。 这个的做法就是判断是否完美匹配&#xff0c;完美匹配则后手必胜&#xff0c;否则先手必胜。 …

House Building HDU - 5538

House Building HDU - 5538 题意&#xff1a; 有n * m的地方&#xff0c;每个地方都有不同高度的1 * 1的正方形块&#xff0c;相邻块紧密排列&#xff0c;问这些块的表面积是多少&#xff1f; 题解&#xff1a; 对于位置为(i,j)的一个高度为x的块&#xff0c;他的测表面积为…

.NET 中创建支持集合初始化器的类型

对象初始化器和集合初始化器只是语法糖&#xff0c;但是能让你的代码看起来更加清晰。至少能让对象初始化的代码和其他业务执行的代码分开&#xff0c;可读性会好一些。本文将编写一个类型&#xff0c;可以使用集合初始化器构造这个类型。不只是添加元素的集合初始化器&#xf…

【无码专区8】三角形二维数点——计数有多少个给定点落在三角形区域内

因为只有std&#xff0c;没有自我实现&#xff0c;所以是无码专区 主要是为了训练思维能力 solution才是dls正解&#xff0c;但是因为只有潦草几句&#xff0c;所以大部分会有我自己基于正解上面的算法实现过程&#xff0c;可能选择的算法跟std中dls的实现不太一样。 std可能…