E. Train Hard, Win Easy(数学推导 + 前缀和)

news/2024/11/17 7:21:58/

Problem - E - Codeforces

 

这是一个有关竞赛编程的问题。Zibi 是一名竞赛编程教练,有 n 名选手想要备战。培训比赛具有一些不同寻常的规则——每个团队有两名成员和两个问题,每个选手都会编写其中一个问题的代码。当然,一个团队中的人将编写不同的问题。

评分规则也不是典型的。第一个问题总是一个实现问题:你必须非常快地实现某个众所周知的算法,而你的打字时间将被评分。第二个问题是一个可怕的几何任务,你只需要在合理的时间内得到它的通过。在这里,你的代码长度和难度很重要。之后,Zibi 将为每个方案给出一些罚分(可能是负数),团队的最终得分是它们的总和(得分越少,就越好)。

我们知道,当第 i 位选手编写第一个任务时,他总是会得到 xi 分,编写第二个任务时,他总是会得到 yi 分。我们可以假设,所有选手都知道彼此的技能,并在比赛期间分配问题,以最小化他们的最终得分。请记住,在比赛中,每个人都只编写一个问题。

Zibi 希望所有选手彼此之间进行比赛。然而,有 m 对人真的不喜欢合作,他们绝对不会在一起写比赛。尽管如此,教练将为所有可能的人组成团队,这些人不会互相厌恶。对于每个参与者,教练都感兴趣,他或她所训练的所有团队的得分总和是多少?

输入包含若干行:第一行包含两个整数 n 和 m(2≤n≤300000,0≤m≤300000)——参赛者数量和不想一起写比赛的人数。接下来的 n 行,每行包含两个整数 xi 和 yi(−109≤xi,yi≤109)——第 i 位选手在第一个问题和第二个问题上获得的分数。保证没有两个人既有 xi 又有 yi 相同的情况。最后的 m 行中,每行包含两个整数 ui 和 vi(1≤ui,vi≤n,ui≠vi)——不想在同一个团队中的人的索引。每个无序索引对最多出现一次。

输出 n 行,按照它们在输入中出现的顺序,输出所有参与者的得分总和。

Examples

input

Copy

3 2
1 2
2 3
1 3
1 2
2 3

output

Copy

3 0 3 

input

Copy

3 3
1 2
2 3
1 3
1 2
2 3
1 3

output

Copy

0 0 0 

input

Copy

5 3
-1 3
2 4
1 1
3 5
2 2
1 4
2 3
3 5

output

Copy

4 14 4 16 10 

题解:
除了m种不会组队的,其他一定会组队,单个枚举的话n^2肯定会t,

那么我们可不可以先算出所有的贡献(假设没有之间不组队的人),所有人都相互组队

但这时又会有一个问题,我们如何确定组队时,谁写第一题谁写第二题?

假设我们设

a1 a2

b1 b2

如果a写第一题更优应该满足

a1 + b2 < b1 + a2

变形就成了

a1 - a2 < b1 - b2

我们按照这个排序一下,开始找最优

假设此时遍历到i,i的下标是id(原来的下标)

由于每一个人的顶多会和n - 1个人组队,

贡献其实就是统计前i - 1个人怎么选,(n - i)个人怎么选

由于我们排过序,前面i - 1个人,肯定选第一个比较好,(注意此时都是在和第i个比),前i-1的第二个由i选比较好

对于(n - i)个,排在i后面的,相比选(n - i)的第一个肯定不如选让i选第一个,那么(n - i)的都选第二个

当然对于不能组队的也要减去其贡献,每次记录id,代表其已经选过

然后看是否有和id不能一起组队的,

如果有又分为两种情况

1.被标记过,说明这个人在前面,说明当时肯定这个人选的是第一个,那么id选的就是第二个,减去贡献

2.刚好与第一种相反

#include <cstdio>
#include <cstring>
#include <algorithm>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
#define int long long
typedef pair<int,int> PII;
int mod = 1e9 + 7;
int n,m;
struct node
{int one,two,id;
}a[300050];
int one[300050];
int two[300050];
int last[300005];
vector<int> p[300050];
bool cmp(node a,node b)
{return a.one - a.two < b.one - b.two;
}
int ans[300050]; 
void solve()
{cin >> n >> m;for(int i = 1;i <= n;i++){cin >> a[i].one >> a[i].two;a[i].id = i;one[i] = a[i].one;two[i] = a[i].two;}for(int i = 1;i <= m;i++){int x,y;cin >> x >> y;p[x].push_back(y);p[y].push_back(x);}sort(a + 1,a + 1 + n,cmp);for(int i = n;i >= 1;i--)last[i] = last[i + 1] + a[i].two;map<int,int> f;int pre = 0;for(int i = 1;i <= n;i++){int id = a[i].id;f[id] = 1;ans[id] += pre;ans[id] += (i - 1)*a[i].two;ans[id] += last[i + 1];ans[id] += (n - i)*a[i].one;for(int j = 0;j < p[id].size();j++){int now = p[id][j];if(f[now]){ans[id] -= one[now];ans[id] -= two[id];}else{ans[id] -= one[id];ans[id] -= two[now];}}pre += a[i].one;}for(int i = 1;i <= n;i++)cout << ans[i] <<" ";
}
signed main()
{ios::sync_with_stdio(0 );cin.tie(0);cout.tie(0);int t = 1;
//	cin >> t;while(t--){solve(); }
}


http://www.ppmy.cn/news/59151.html

相关文章

感知机介绍

1&#xff0c;数学定义&#xff1a; Note:<>在数学中通常指求期望的意思。 假设我们用感知机区分cat和dog&#xff0c;使用下面三个特征&#xff1a;x1: color of hair&#xff1b;x2:length of leg&#xff1b;x3:volume of head。cat 用1表示&#xff0c;dog用-1表示&…

MySQL数据备份和恢复

MySQL数据备份和恢复 数据备份 mysqldump是MySQL数据库备份工具&#xff0c;可以备份MySQL数据库中的数据和结构&#xff0c;生成.sql文件&#xff0c;方便数据的迁移和恢复。 使用mysqldump工具前一定要配置环境变量 打开开始菜单&#xff0c;搜索“环境变量”。点击“编辑…

聚观早报|五一假期机票均价超1200元;苹果自动驾驶测试减员超25%

今日要闻&#xff1a;五一假期国内机票均价超1200元&#xff1b;谷歌、微软、OpenAI等将讨论AI问题&#xff1b;苹果自动驾驶测试司机团队减员超25%&#xff1b;“五一”最热十大景区出炉&#xff1b;李想辟谣理想汽车砸钱雇媒体营销 五一假期国内机票均价超1200元 5 月 3 日…

【Linux内核解析-linux-5.14.10-内核源码注释】MM内存管理内核启动初始化源码解析

源码 这是Linux内核中的mm_init函数的代码&#xff0c;其作用是初始化内存管理相关的组件和数据结构。 static: 这是一个函数声明修饰符&#xff0c;表示该函数只在当前文件中可见。 void __init: 这是函数的返回类型和修饰符&#xff0c;表示该函数是内核初始化代码。 page…

恒源云使用

目录 一、OSS的使用 1、oss本地上传到服务器 2、oss服务器登录下载到服务器 3、oss服务器上下载到本地 二、解压缩 三、训练 四、训练结束自动关机、上传数据 五、查看实例储存空间 六、文件管理 七、所需的库 八、网盘数据上传下载 1&#xff09;下载命令工具 2…

明明花钱上了ERP,为什么还要我装个MES系统

目前&#xff0c; ERP系统依旧是很多制造企业的选择。据统计&#xff0c;ERP系统的应用已经达到70&#xff05;以上&#xff0c;但是在车间的应用&#xff0c; MES系统的应用比例并不高。那么&#xff0c;为什么现在很多企业又都选择再上个MES呢&#xff1f; MES系统是一个面向…

养鱼-新手快乐缸阶段的一点总结

这是学习笔记的第 2456篇文章 养鱼这件事情上&#xff0c;除了满足了孩子的希望&#xff0c;也算是满足了自己的一点爱好。 从3月份开始的鱼缸进化到现在&#xff0c;对于养鱼这件事情的态度已经发生了很大的变化&#xff0c;我也趁此机会总结和梳理一下&#xff0c;先来定性我…

安卓手机搭建智能语音客服/通话播音/聊天播音乐技术实现

声明&#xff0c;此项技术需要root支持&#xff0c;如果因为刷机导致手机变砖或其他不可预料的后果请自行解决。 场景 我有一个朋友他是做业务的&#xff0c;主要还是做电销&#xff0c;其实电销相对于以前纪念没那么好做了&#xff08;我自己觉得主要是互联网冲击&#xff0c…