题目链接
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); for(int i=0;i<n&&n>1;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; }
|
你最愿意做的哪件事,才是你的天赋所在