zoukankan      html  css  js  c++  java
  • I

    #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、全部干掉对方(先用最小的代价干掉防御态,然后剩下的全部减去剩下怪的和就行)

  • 相关阅读:
    模仿jquery的一些实现
    使按钮失效的方法
    类似jquery的一个demo
    oracle 集合变量以及自定义异常的用法
    java的for循环问题的解决,以及安卓中ListView插入数据的问题
    Spring AOP基于xml配置实例
    plsql 的循环之 goto
    Spring AOP报错
    补全aaz288 可能有问题的过程 P_COMPL_AAZ288
    Spring注解配置
  • 原文地址:https://www.cnblogs.com/zhangzhenjun/p/12229839.html
Copyright © 2011-2022 走看看