ETrain Hard, Win Easy

Train Hard, Win Easy

https://ac.nowcoder.com/acm/problem/113104

题意

百度翻译党已经阵亡,在网上找到的我觉得比较好的题意,直接搬过来

总共有两道题,给你n个人做每道题目的时间,之后是m个关系,这m对人无法组队,两道题目是两个人组队才能做的,每次组队的时候他都会想让总的时间最少,每个人都会和能组队的人组一次,问你这个人最后的总时间是多久。

分析

两两匹配
代价取
假设
换项
我们按照此规则排序即可,在前面的选x,后面的选y
特殊考虑m个不能匹配的情况

参考代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
struct oppo{
    int x,y,id;
    bool operator<(const oppo b){
        return x-y<b.x-b.y;
    }
}a[1000006];
int ans[1000006];
signed main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        scanf("%lld%lld",&a[i].x,&a[i].y);
        a[i].id=i;
    }
    for(int i=1;i<=m;i++){
        int s,t;
        scanf("%lld%lld",&s,&t);
        int h=min(a[s].x+a[t].y,a[s].y+a[t].x);
        ans[s]-=h;
        ans[t]-=h;
    }
    sort(a+1,a+n+1);
    int tot=0;
    for(int i=1;i<=n;i++){
        ans[a[i].id]+=tot+a[i].y*(i-1);
        tot+=a[i].x;
    }
    tot=0;
    for(int i=n;i>=1;i--){
        ans[a[i].id]+=tot+a[i].x*(n-i);
        tot+=a[i].y;
    }
    for(int i=1;i<=n;i++)
        cout<<ans[i]<<" ";
    return 0;
}
全部评论

相关推荐

牛至超人:我将凌晨两点给你打电话
点赞 评论 收藏
分享
HR_丸山彩同学:你的项目描述里,系统设计讲了很多:MemCube是什么、三级存储架构怎么设计、四种遗忘策略分别是什么。这些面试的时候讲没问题,但简历上不需要这么细。 简历要突出的是影响力,不是实现细节。面试官看简历的时候想知道的是「这个项目有多大价值」,不是「这个项目具体怎么实现的」。实现细节是面试时候聊的 怎么改:技术细节可以精简为一句「采用三级存储架构+四种遗忘策略」,把省出来的篇幅用来写影响力。比如:项目有没有开源?有没有写成技术博客?有没有被别人使用过? 校园经历没有任何信息量,任何人都可以写这句话,写了等于没写。更关键的是,你投的是技术岗,校园活动经历本来就不是加分项。如果非要写,必须写出具体的数字和成果。如果你没有这些数字,那就老老实实删掉 「端到端耗时缩减30-40%」要给出确切数字和绝对值。从1000ms降到600ms是降了40%,从100ms降到60ms也是降了40%,但这两个含义完全不一样。其他也是,涉及到数据,准备好证据,口径统一,面试会问 「熟练」「熟悉」「了解」混在一起用,读起来很乱。而且「了解前端需求」最好改成「具备前后端协作经验」
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务