• Codeforces Round #623 (Div. 1, based on VK Cup 2019-2020


     1 #define HAVE_STRUCT_TIMESPEC
     2 #include<bits/stdc++.h>
     3 using namespace std;
     4 pair<int,int>a[200007];
     5 bool cmp(pair<int,int>a,pair<int,int>b){
     6     if(a.second!=b.second)
     7         return a.second>b.second;//按照时间从大到小排序
     8     return a.first<b.first;
     9 }
    10 map<int,int>fa;
    11 int find_(int x){
    12     if(!fa[x])
    13         return x;
    14     return fa[x]=find_(fa[x]);
    15 }
    16 int main(){
    17     ios::sync_with_stdio(false);
    18     cin.tie(NULL);
    19     cout.tie(NULL);
    20     int n;
    21     cin>>n;
    22     for(int i=1;i<=n;++i)
    23         cin>>a[i].first;
    24     for(int i=1;i<=n;++i)
    25         cin>>a[i].second;
    26     sort(a+1,a+1+n,cmp);
    27     long long ans=0;
    28     for(int i=1;i<=n;++i){//按照个数从小到大排序,可能会让个数小而时间多的不停++,而原本个数多时间少的却加的不多,导致答案不对,先搞时间多的代价大的才是正解
    29         int x=find_(a[i].first);
    30         if(a[i].first==x){//当前个数唯一
    31             int y=find_(a[i].first+1);//把它合并到+1的位置
    32             fa[x]=y;
    33         }
    34         else{//当前已有,放到最近一个比它大且没别选中的位置
    35             ans+=1ll*(x-a[i].first)*a[i].second;//更新贡献
    36             int y=find_(x+1);//合并到+1的位置(原本的位置更新后被占了)
    37             fa[x]=y;
    38         }
    39     }
    40     cout<<ans;
    41     return 0;
    42 }
    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    java环境配置为1.7jdk为什么cmd java -version查看版本是1.8
    bulid path 引 jar包 步骤
    eclipse 报错
    PLSQL使用技巧
    Oracle sqlplus不是内部或外部命令
    SVN 插件安装到Myeclipse10 上(经典)
    socket学习
    Eclipse 配置 插件svn 包步骤
    如何在Eclipse中使用SVN(经典)
    linux 下搭建LAMP
  • 原文地址:https://www.cnblogs.com/ldudxy/p/12365315.html
Copyright © 2020-2023  润新知