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

  • 相关阅读:
    OpenCV4【6】-改变颜色空间
    OpenCV4【5】-图像基本运算
    OpenCV4【4】- 图像基本操作
    OpenCV4【3】- GUI特性:轨迹栏作为调色板
    OpenCV4 【2】- GUI特性 :绘图功能 与 鼠标事件
    OpenCV4【1】- 入门用法
    numpy
    可变对象 及其 作为 函数参数 的注意点
    关于m个苹果每天吃一个或者两个,有几种吃法
    kali之win10 linux子系统环境变量冲突解决办法
  • 原文地址:https://www.cnblogs.com/zhangzhenjun/p/12229839.html
Copyright © 2011-2022 走看看