首页 > 其他 > 详细

Codeforces 1230D - Marcin and Training Camp (贪心)

时间:2020-04-15 00:17:21      阅读:64      评论:0      收藏:0      [点我收藏+]

Description

思路

显然,如果一个团队所有人里面会的算法都不完全一样,那么肯定存在一个看不起所有人的人(会得最多或会得最偏)。因此一个团队至少有两个人会的算法一模一样(即a值一样)。同时,如果有一个人在一个团队,那么会的题和他相当或比他少(是他的子集)的人也可以加入这个团队。
当然,团队人越多越好,这样b值和就越大。把所有会的算法完全一样的人提出来,再把是这群人的子集的人全部加入到一个团体。这就是答案团体。

#include <bits/stdc++.h>
using namespace std;
#define endl ‘\n‘
typedef long long ll;
const int N = 1e5 + 10;
 
pair<ll, ll> num[N];
set<ll> check;
int vis[N];
 
int main() {
    int n;
    cin >> n;
    for(int i = 1; i <= n; i++) {
        cin >> num[i].first;
    }
    for(int i = 1; i <= n; i++) {
        cin >> num[i].second;
    }
    sort(num + 1,  num + 1 + n);
    for(int i = 2; i <= n; i++) {
        if(num[i].first == num[i - 1].first) {
            vis[i] = vis[i - 1] = 1;
            check.insert(num[i].first);
        }
    }
    for(ll val : check) {
        for(int i = 1; i <= n; i++) {
            if(vis[i]) continue;
            if((val & num[i].first) == num[i].first) {
                vis[i] = 1;
            }
        }
    }
    ll ans = 0;
    for(int i = 1; i <= n; i++) 
        if(vis[i]) ans += num[i].second;
    cout << ans << endl;
}

Codeforces 1230D - Marcin and Training Camp (贪心)

原文:https://www.cnblogs.com/limil/p/12702149.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!