ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2022百度之星 初赛1 A-B

2022-08-27 22:31:32  阅读:158  来源: 互联网

标签:int cin 初赛 while solve 2022 之星 堆中 fo


A:洞穴

不是很懂,但是跑了一遍kruskal就过了

//-------------------------代码----------------------------

//#define int ll
const int N = 200;
int n,m;

int dist[N][N];

struct node {
    int a,b,w;
    bool operator<(const node & x) const {
        return w < x.w;
    }
}p[N];
int f[N];

bool cmp(pii a,pii b) {
    if(a.x == b.x) return a.y < b.y;
    return a.x < b.x;
}

int find(int x) {
    return x == f[x] ? x : f[x] = find(f[x]);
}

void solve()
{
//    cin>>n>>m;
    fo(i,1,200) f[i] = i;
    cin>>n;
    int cnt = 0;
    int w;
    fo(i,1,n) {
        fo(j,1,n) {
            cin>>w;
            if(j > i) {
                p[++cnt] = {i,j,w};
            }
        }
    }
    sort(p+1,p+1+cnt);
    int sum = 0;
    V<pii>q;
    cout<<n - 1<<endl;
    for(int i = 1;i<=cnt;i++) {
        int a = p[i].a,b = p[i].b,w = p[i].w;
        if(find(a) == find(b)) {
            
        } else {
            f[a] = find(b);
            sum ++ ;
            q.pb({a,b});
        }
        if(sum == n - 1) break;
    }
    sort(all(q),cmp);
    for(auto it:q) {
        cout<<it.x<<' '<<it.y<<endl; 
    } 
}
void main_init() {}
signed main(){
    AC();clapping();TLE;
    cout<<fixed<<setprecision(12);
    main_init();
//  while(cin>>n,n)
//  while(cin>>n>>m,n,m)
    int t;cin>>t;while(t -- )
    solve();
//    {solve(); }
    return 0;
}

/*样例区


*/

//------------------------------------------------------------

B.小度养小猫

贪心。
可以将于一只猫的不满意度 化为 ,后面一项为常数。
则只需要使 最小,如果没有限制,那么 越大的越早喂食就可以。
现在考虑每一只猫 必须在 时间后喂食,那么开一个堆,每扫到一只猫就将其加入堆中,决策时取堆顶
即可。

当枚举到第k个,前 k 个都是可以满足条件的,将它们一起放入堆中

当枚举到 第i 个,这个也是可以满足条件的,放入堆中

取出堆中最大的数就可以了。

auto idx = q.end();
idx -- ;
res += 1ll * (*idx) * i * i;

 

 

//-------------------------代码----------------------------

//#define int ll
const int N = 1e5+10;
int n,m,k;
int c[N];
void solve()
{
//    cin>>n>>m;
    cin>>n>>k;
    ll res = 0;
    fo(i,1,n) {
        cin>>c[i];
        res -= 1ll * i * i * c[i];
    }
    set<int> q;
    fo(i,1,k) q.insert(c[i]);
    fo(i,k + 1,k + n) {
        if(i <= n)q.insert(c[i]);
        auto idx = q.end();
        idx -- ;
        res += 1ll*(*idx) * i * i;
        q.erase(idx);
    }
    cout<<res<<endl;
    
}
void main_init() {}
signed main(){
    AC();clapping();TLE;
    cout<<fixed<<setprecision(12);
    main_init();
//  while(cin>>n,n)
//  while(cin>>n>>m,n,m)
//    int t;cin>>t;while(t -- )
    solve();
//    {solve(); }
    return 0;
}

/*样例区


*/

//------------------------------------------------------------

C:

标签:int,cin,初赛,while,solve,2022,之星,堆中,fo
来源: https://www.cnblogs.com/er007/p/16631665.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有