你最愿意做的哪件事,才是你的天赋所在

0%

Coderforces #588-div2-D

题目链接

Codeforces #588-div2-D

思路

这道题看清楚了思路很简单,我们对一个人单独考虑,假设现在我全部人都选择进队,然后对每个人单独考虑,如果队中有比我更强的,那么我就不用出队,否则,我就需要出队。
所以每次用取和符号判断队伍中是否存在比我更强的人

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 7e3+10;
bool vis[maxn];
struct node
{
ll a,b;
bool operator < (const node s)
{
return a>s.a;
}
}arr[maxn];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)scanf("%I64d",&arr[i].a);
for(int i=0;i<n;i++)scanf("%I64d",&arr[i].b);
ll ans = 0;
ll tans = 0;
sort(arr,arr+n);//从大到小排序,因为有前置0会影响取和运算
for(int i=0;i<n&&n>1;i++)//枚举第i个人是否出队
{
vis[i]=true;
for(int j=0;j<n;j++)
{
if(!vis[j]&&(arr[j].a&arr[i].a)==arr[i].a)
{
vis[i]=false;
ans+=arr[i].b;
break;
}
}
}
cout<<ans<<endl;
}
你最愿意做的哪件事,才是你的天赋所在
-------------你最愿意做的哪件事才是你的天赋所在-------------