AtCoder Beginner Contest 373

news/2024/10/9 0:52:14 标签: atcoder

D - Hidden Weights

题目:

思路:

代码:

#include <bits/stdc++.h>
#define fi first;
#define se second;

using namespace std;

typedef long long LL;
typedef pair<int,int> PII;

const int N=2e5+10;
const LL lnf=0x3f3f3f3f3f3f3f3f;

int n, m;
int h[N], e[N<<1] ,ne[N<<1], w[N<<1], idx;
LL res[N];

void add(int a,int b, int c)
{
    e[idx]=b,  ne[idx]=h[a], w[idx]=c, h[a]=idx++;
}

void dfs(int u)
{
    for(int i=h[u]; ~i; i=ne[i]){
        int v=e[i];
        if(res[v]!=lnf) continue;
        res[v]=res[u]+w[i];
        dfs(v);
    }
}

int main()
{
    memset(h,-1,sizeof h);
    cin>>n>>m;
    while(m--){
        int u, v, c;
        cin>>u>>v>>c;
        add(u, v, c), add(v, u, -c);
    }

    memset(res, 0x3f, sizeof res);
    for(int i=1; i<=n; i++){
        if(res[i]==lnf){
            res[i]=0;
            dfs(i);
        }
    }

    for(int i=1; i<=n; i++){
        cout<<res[i]<<" ";
    }

    cout<<"\n";

    return 0;

}

E - How to Win the Election 

题目:


思路:

二分这个人需要的票数x,现在这个人的票数now=a[i]+x,,二分找的小于等于这个票数的人的位置,如果不在后m个人中,则不能当选; 如果在,我们需要统计从这人开始到第m个人,选票大于now需要的票数,剩余票是否能满足,需要注意,如果,这人原本就在后m个,我们需要分讨,减去这个原本的票数。

代码:

#include <bits/stdc++.h>

using namespace std;

typedef long long LL;

int main()
{
    LL n,m,k;
    cin>>n>>m>>k;

    vector<LL> a(n+1),b(n+1),pre(n+1);
    for(int i=1; i<=n; i++){
        cin>>a[i];
        b[i]=a[i];
    }

    if(n==1){
        cout<<0<<'\n';
        return 0;
    }
    if(n==m){
        for(int i=1; i<=n; i++){
            cout<<0<<' ';
        }
        cout<<'\n';
        return 0;
    }
    sort(b.begin(), b.end());

    for(int i=1; i<=n; i++){
        pre[i]=pre[i-1]+b[i];
    }
    
    LL sum=pre[n];

    for(int i=1; i<=n; i++){
        auto check = [&](LL x)-> bool{
            LL now=a[i]+x, rest=k-sum-x, pos=upper_bound(b.begin(),b.end(), now)-b.begin()-1;
            if(a[i]<b[n-m+1]){
                if(pos<n-m+1) return false;
                return (pos-(n-m))*(now+1)- (pre[pos]-pre[n-m])> rest;
            } else {
                return (pos-n+m)*(now+1)-(pre[pos]-pre[max(0LL ,n-m-1)]-a[i]) > rest;
            }
        };
        LL l=0, r=k-sum, res=-1;
        while(l<=r){
            LL mid=l+r>>1;
            if(check(mid)) r=mid-1, res=mid;
            else l=mid+1;
        }
        cout<<res<<' ';

    }
    cout<<'\n';

    return 0;

}


http://www.niftyadmin.cn/n/5695078.html

相关文章

富格林:发现潜在欺诈安全交易

富格林指出&#xff0c;在全球经济不确定性加剧的背景下&#xff0c;黄金的避险优势再次吸引了投资者的关注。尤其是在今年&#xff0c;随着多种因素的变化&#xff0c;金价的走势引发了市场的广泛讨论。但事实上黄金与其他投资品类相似&#xff0c;也存在潜在的欺诈套路导致我…

【进阶OpenCV】 (4)--图像拼接

文章目录 图像拼接1. 读取图片2. 计算图片特征点及描述符3. 建立暴力匹配器4. 特征匹配5. 透视变换6. 图像拼接 总结 图像拼接 图像拼接是一项将多张有重叠部分的图像&#xff08;这些图像可能是不同时间、不同视角或者不同传感器获得的&#xff09;拼成一幅无缝的全景图或高分…

idea中的Java版本运行错误

1.java: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field com.sun.tools.javac.tree.JCTree qualid 这个错误通常是由于升级到Java 21后,Lombok等库无法正确访问内部的Java编译器API导致的。具体原因如下: Lombok在…

No.13 笔记 | 网络安全防护指南:从法律法规到技术防御

一、法律法规 《中华人民共和国网络安全法》要点 遵守法律&#xff1a;所有个人和组织在使用网络时&#xff0c;必须遵守宪法和法律&#xff0c;不得利用网络从事危害国家安全等活动。 个人信息保护&#xff1a;禁止非法获取、出售或提供个人信息。若违反但未构成犯罪&#x…

Verilog开源项目——百兆以太网交换机(九)表项管理模块设计

Verilog开源项目——百兆以太网交换机&#xff08;九&#xff09;表项管理模块设计 &#x1f508;声明&#xff1a;未经作者允许&#xff0c;禁止转载 &#x1f603;博主主页&#xff1a;王_嘻嘻的CSDN主页 &#x1f511;全新原创以太网交换机项目&#xff0c;Blog内容将聚焦整…

Sym-NCO:利用对称性进行神经组合优化

文章目录 Abstract1 Introduction2 组合优化马尔可夫决策过程中的对称性2.1 组合马尔可夫决策过程2.2 CO-MDP中的对称性3 对称神经组合优化3.1 通过LSym-RL正则化REINFORCE的问题和解决方案对称性3.2 通过预先识别的对称性学习不变表示: L i n v L_{inv} Linv​4 相关工作5 Ex…

TCP BIC 的拟合函数分析

前面说了这么多&#xff0c;还没有对 bic 的数学性质进行分析&#xff0c;本文补上。 tcp reno 完全依赖 ack 时钟以 rtt 为单位线性增窗&#xff0c;增窗速度与 rtt 负相关&#xff0c;如何在 rtt 比较大时增加增窗速度&#xff0c;这就是 bic&#xff0c;以二分替换遍历。 …

企业薪酬管理怎么做?

企业薪酬管理怎么做&#xff1f; 薪酬管理作为人力资源管理的核心议题&#xff0c;直接关乎员工积极性与企业效能。合理的薪酬策略能吸引、保留并激励人才&#xff0c;反之则可能产生负面影响。随着外部环境的变化&#xff0c;人才价值观多元化&#xff0c;薪酬管理的重要性愈…