hdu6396 /// fread()快速读入挂

题目大意:

给定n k

给定主角具有的k种属性

给定n个怪兽具有的k种属性和打死该怪兽后能得到的k种属性对应增幅

求主角最多能打死多少怪兽和最终主角的k种属性

 

k最大为5 开5个优先队列贪心

 

快速读入模板

#include <bits/stdc++.h>
using namespace std;

#define reads(n) FastIO::read(n)
namespace FastIO {
    const int SIZE = 1 << 16;
    char buf[SIZE], obuf[SIZE], str[60];
    int bi = SIZE, bn = SIZE, opt;
    int read(char *s) {
        while (bn) {
            for (; bi < bn && buf[bi] <= ' '; bi++);
            if (bi < bn) break;
            bn = fread(buf, 1, SIZE, stdin);
            bi = 0;
        }
        int sn = 0;
        while (bn) {
            for (; bi < bn && buf[bi] > ' '; bi++) s[sn++] = buf[bi];
            if (bi < bn) break;
            bn = fread(buf, 1, SIZE, stdin);
            bi = 0;
        }
        s[sn] = 0;
        return sn;
    }
    bool read(int& x) {
        int n = read(str), bf;
        if (!n) return 0;
        int i = 0; if (str[i] == '-') bf = -1, i++; else bf = 1;
        for (x = 0; i < n; i++) x = x * 10 + str[i] - '0';
        if (bf < 0) x = -x;
        return 1;
    }
};

int main()
{
     int n; reads(n);
     return 0;  
}

 

#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define INF 0x3f3f3f3f
#define mem(i,j) memset(i,j,sizeof(i))
const int N=1e5+5;

#define reads(n) FastIO::read(n)
namespace FastIO {
    const int SIZE = 1 << 16;
    char buf[SIZE], obuf[SIZE], str[60];
    int bi = SIZE, bn = SIZE, opt;
    int read(char *s) {
        while (bn) {
            for (; bi < bn && buf[bi] <= ' '; bi++);
            if (bi < bn) break;
            bn = fread(buf, 1, SIZE, stdin);
            bi = 0;
        }
        int sn = 0;
        while (bn) {
            for (; bi < bn && buf[bi] > ' '; bi++) s[sn++] = buf[bi];
            if (bi < bn) break;
            bn = fread(buf, 1, SIZE, stdin);
            bi = 0;
        }
        s[sn] = 0;
        return sn;
    }
    bool read(int& x) {
        int n = read(str), bf;
        if (!n) return 0;
        int i = 0; if (str[i] == '-') bf = -1, i++; else bf = 1;
        for (x = 0; i < n; i++) x = x * 10 + str[i] - '0';
        if (bf < 0) x = -x;
        return 1;
    }
};

int n,k;
int v[6],a[N][11];
struct NODE{
    int x,id;
    bool operator <(const NODE& p)const {
        return x>p.x;
    }
};
priority_queue<NODE> q[6];

int main()
{
    int t; reads(t);
    while(t--) {
        reads(n); reads(k);
        for(int i=0;i<k;i++)
            while(!q[i].empty()) q[i].pop();
        for(int i=0;i<k;i++)
            reads(v[i]);
        for(int i=0;i<n;i++)
            for(int j=0;j<2*k;j++)
                reads(a[i][j]);
        for(int i=0;i<n;i++)
            q[0].push({a[i][0],i});
        int ans=0;
        while(1) {
            bool OK=0;
            for(int i=0;i<k;i++) {
                while(!q[i].empty()) {
                    NODE t=q[i].top();
                    if(t.x<=v[i]) {
                        q[i].pop();
                        if(i==k-1) {
                            ans++; OK=1;
                            for(int j=0;j<k;j++)
                                v[j]+=a[t.id][j+k];
                        } else {
                            t.x=a[t.id][i+1];
                            q[i+1].push(t);
                        }
                    } else break;
                }
            }
            if(!OK) break;
        }
        printf("%d\n",ans);
        for(int i=0;i<k;i++) {
            printf("%d",v[i]);
            if(i==k-1) printf("\n");
            else printf(" ");
        }
    }

    return 0;
}
View Code

 

转载于:https://www.cnblogs.com/zquzjx/p/10384185.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值