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≤1001≤n≤100,1≤ai≤100,−100≤di≤100。

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。则对答案无贡献。
    • iii 被 jjj 超过后又再次超过了 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;
}

CodeForces730E Award Ceremony(拓扑排序+结论)相关推荐

  1. python 拓扑排序_拓扑排序(topsort)算法详解

    在图论中,由某个集合上的偏序得到全序的策略就是拓补排序算法.拓扑排序常出现在涉及偏序关系的问题中,例如时序的先后.事物的依赖等.针对这些问题拓扑排序通常能有效地给出可行解. 为了便于理解,我们先来看一 ...

  2. hihocoder 1343 : Stable Members【拓扑排序】

    hihocoder #1343:题目 解释: 一个学习小组,一共有N个学员,一个主管.每个学员都有自己的导师(一个或者多个),导师可以是其他学员也可以是主管. 每周学员都要把自己的学习报告和收到的报告 ...

  3. 【ZOJ - 3780】Paint the Grid Again(拓扑排序,图论,证明性质)

    题干: Leo has a grid with N × N cells. He wants to paint each cell with a specific color (either black ...

  4. leetcode阶段总结——拓扑排序

    leetcode阶段总结--拓扑排序 leetcode中经常出现的题型之一.其中,拓扑排序的概念可以参考这里,这里主要总结一下前300题中出现的几个关于拓扑排序的题,以待之后复习的时候查找. leet ...

  5. 搜索与图论1—深搜、宽搜、拓扑排序

    本人的LeetCode账号:魔术师的徒弟,欢迎关注获取每日一题题解,快来一起刷题呀~ 本人Gitee账号:路由器,欢迎关注获取博客内容源码. 文章目录 一.深度优先搜索 1 排列数字 2 N皇后 二. ...

  6. 菜肴制作(拓扑排序) 题解

    题目描述 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜肴预估的质量从高到低给予1到N的顺序编号,预估质量最高的菜肴编号为1. 由于菜肴 ...

  7. 拓扑排序的两种实现:Kahn算法和dfs算法

    本文将从以下几个方面介绍拓扑排序: 拓扑排序的定义和前置条件 和离散数学中偏序/全序概念的联系 典型实现算法 Kahn算法 基于DFS的算法 解的唯一性问题 实际例子 取材自以下材料: http:// ...

  8. 图解:有向环、拓扑排序与Kosaraju算法

    25张图详解有向环.拓扑排序与Kosaraju算法.有向环如何检测?拓扑排序的原理?Kosaraju算法又是如何得到的?本文告诉你答案 首先来看一下今天的内容大纲,内容非常多,主要是对算法思路与来源的 ...

  9. D2欧拉路,拓扑排序,和差分约束

    第一题:太鼓达人:BZOJ3033 题意:给出k,求一个最长的M位01串,使其从每一个位置向后走k个得到 的M个k位01串互不相同(最后一个和第一个相邻,即是一个环).输出 字典序最小的答案. 2 ≤ ...

最新文章

  1. Shell脚本读取命令行参数
  2. java集群调度_Cuckoo-Schedule
  3. postgres的initdb解析——从一次插件升级失败说起
  4. C#和Sql Server 2005中时间的最大值和最小值
  5. python基础知识点-Python入门基础知识点(基础语法介绍)
  6. MySql优化的方法
  7. 坚持跑步与读书,方不辜负此生
  8. JDBC Druid式link
  9. 2007cad多个文件窗口上部排列_【中考信息技术总复习讲义】模块三 操作系统与文件管理...
  10. 机器学习算法总结--K近邻
  11. Flutter实战之底部导航栏 BottomNavigation
  12. 无法从服务器获取视频文件,视频从云服务器获取视频文件
  13. esxi安装参考文章及见解
  14. centos7.2下安装php7.1缺少依赖包汇总(初稿)
  15. 电脑开热点手机连不上
  16. 【干货】数据集网站汇总!
  17. 新手小白做短视频,一个月收益10000多,超过自己的主业收入
  18. 【求回答】如何在mac上使用pip?zsh: command not found: pip
  19. 建筑标准何其之多,python爬虫半天全梭
  20. Android Studio 星座查询系统

热门文章

  1. 学好数学建模,走哪买菜都不怕!
  2. python新闻评论分析_从新闻文章中提取评论
  3. java 最好 入门_C++和Java哪个比较好入门?初学者该如何选择?
  4. 噪声与振动控制工程手册_仨亿技术丨工程机械噪声与控制分析
  5. java不适合开发cv吗_JavaCV开发环境的配置
  6. html绑定按键图片移动,如何使用JS实现用键盘控制图片移动呢?
  7. deb包如何改支持12系统_对一个deb包的解压、修改、重新打包全过程方法
  8. 吴恩达DeepLearningCourse1-神经网络和深度学习
  9. session.setAttribute和request.setAttribute的区别
  10. jsp中为什么在跳转500页面的时候 图片加载不出来