zoukankan      html  css  js  c++  java
  • 2018杭电多校第七场1011(优先队列【结构体排序】,思维)

    #include<bits/stdc++.h>
    using namespace std;
    int ab[10];
    struct node
    {
        int hp,num;//num为了方便跟踪每一个hp值
        bool operator < (const node &x)const
    {
        return hp>x.hp;//按照血量降序排列
    }
    }tmp;
    struct guaishou
    {
        int hp[10],ad[10],num;//保存数据的地方
    }gs[100010];
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            int sum=0;
            int n,k;
            scanf("%d%d",&n,&k);
            for(int i=1;i<=k;i++)
            {
                scanf("%d",&ab[i]);
            }
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=k;j++)
                {
                    scanf("%d",&gs[i].hp[j]);
                }
                for(int j=1;j<=k;j++)
                {
                    scanf("%d",&gs[i].ad[j]);
                }
                gs[i].num=i;
            }
            priority_queue<node>q[10];
            for(int i=1;i<=n;i++)
            {
                q[1].push({gs[i].hp[1],i});//第一个数据放入队列
            }
            int ans=0;
            while(1){
            for(int i=1;i<k;i++)//每一个hp都要大于等于才可以击杀
            {
                while(!q[i].empty())
                {
                    tmp=q[i].top();
                    if(tmp.hp<=ab[i])
                    {
                        int flag=tmp.num;
                        q[i+1].push({gs[flag].hp[i+1],flag});//把这一个条件满足的hp放入下一个队列中再次筛选
                        q[i].pop();
                    }
                    else
                        break;//剩余的这一次击杀不了
                }
            }
            while(!q[k].empty())
            {
                tmp=q[k].top();
                if(tmp.hp<=ab[k])
                {
                    sum++;//可以击杀
                    int flag=tmp.num;
                    for(int i=1;i<=k;i++)
                        ab[i]+=gs[flag].ad[i];
                    q[k].pop();
                }
                else
                    break;
            }
            if(ans==sum)
                break;//用来判重(与上一次循环时相同)
            ans=sum;
            }
            printf("%d ",ans);
            for(int i=1;i<=k;i++)
                printf("%d%c",ab[i],i==k?' ':' ');
        }
        return 0;
    }
    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    WEB手机端界面绝对定位分辨率扩大导致错乱问题和块级元素旋转角度CSS
    8.1 设置滑动效果和多媒体
    2.4 链接文字属性和标记元素
    2.3元信息标记 meta
    记录这几天工作内容发现的兼容性问题
    WEB前端开发工程师成长之路(计划)
    IE兼容CSS3圆角border-radius的方法
    Quirks模式是什么?
    让所有浏览器包括IE6即支持最大宽度又支持最小宽度。
    ie6下png背景显示问题?
  • 原文地址:https://www.cnblogs.com/ldudxy/p/9502563.html
Copyright © 2011-2022 走看看