I - Strength HDU - 6563
Posted zhangzhenjun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了I - Strength HDU - 6563相关的知识,希望对你有一定的参考价值。
#include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<algorithm> #include<cstring> #include<string> #include<vector> #include<map> #include<set> #include<queue> const int maxn=1e5+100; typedef long long ll; using namespace std; int a[maxn],b[maxn],cnt,visit[maxn];//cnt来记录防御态的个数 struct Node { int value,pos; bool operator <(const Node &d)const { return value<d.value; } } node[maxn]; int main() { int t,n,m; scanf("%d",&t); int kase=0; ll sum=0,sum1=0;; while(t--) { scanf("%d%d",&n,&m); memset(visit,0,sizeof(visit)); sum=0; sum1=0; cnt=0; for(int i=0; i<n; i++) { scanf("%d",&a[i]); sum+=a[i]; } for(int i=0; i<m; i++) scanf("%d",&node[i].value); for(int i=0; i<m; i++) { scanf("%d",&node[i].pos); if(!node[i].pos) sum1+=node[i].value; if(node[i].pos) b[cnt++]=node[i].value; } ll ans,ans1; ans=ans1=0; //是否可以全部干掉 sort(node,node+m); sort(a,a+n); int flag=0; if(n>=m) { int i,j; i=n-1; j=m-1; for(; i>=0&&j>=0; i--) { if(node[j].value<=a[i]) j--; else break; if(!j) break; } if(!j) flag=1; } if(flag) { int j=0; for(int i=0; i<n&&j<cnt; i++) { if(a[i]>=b[j]) { j++; sum-=a[i]; } } if(j!=cnt) flag=0; else ans=sum-sum1; } int i=n-1,j=0; for(; i&&j<m; i--) { if(a[i]>=node[j].value) { if(!node[j].pos) { ans1+=(a[i]-node[j].value); } j++; } else break; } printf("Case %d: %lld ",++kase,max(ans,ans1)); } return 0; }
这道题很有意思
首先题意不明(哈哈)
他有防御态,干掉对方所有怪之后才能直接打对方
两种情况
1、不全部干掉对方(用自己这边大的干对方最小的,用次大的干对方次小的,直到不能进行)
2、全部干掉对方(先用最小的代价干掉防御态,然后剩下的全部减去剩下怪的和就行)
以上是关于I - Strength HDU - 6563的主要内容,如果未能解决你的问题,请参考以下文章
2022-09-05:作为国王的统治者,你有一支巫师军队听你指挥。 :给你一个下标从 0 开始的整数数组 strength , 其中 strength[i] 表示第 i 位巫师的力量值。 对于连续的一