HDU 6396 Swordsman --------2018 Multi-University Training Contest 7 (模拟+读入挂)
打怪升级 一开始有N个怪物;主角有K个能力;只有K个能力都击败怪物才能斩杀怪物并获得K个能力的增值;问最多能杀几个怪物;
做法:
用优先队列把怪物能力装进去;能力小放前面;
最重要的是数据量要用读入挂才能过;(读入挂太神奇了!!)
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- const ll mod=;
- const int maxn=1e5+;
- const ll inf=0x3f3f3f3f3f3f;
- namespace IO{
- #define BUF_SIZE 100000
- #define OUT_SIZE 100000
- #define ll long long
- //fread->read
- bool IOerror=;
- inline char nc(){
- static char buf[BUF_SIZE],*p1=buf+BUF_SIZE,*pend=buf+BUF_SIZE;
- if (p1==pend){
- p1=buf; pend=buf+fread(buf,,BUF_SIZE,stdin);
- if (pend==p1){IOerror=;return -;}
- //{printf("IO error!\n");system("pause");for (;;);exit(0);}
- }
- return *p1++;
- }
- inline bool blank(char ch){return ch==' '||ch=='\n'||ch=='\r'||ch=='\t';}
- inline void read(int &x){
- bool sign=; char ch=nc(); x=;
- for (;blank(ch);ch=nc());
- if (IOerror)return;
- if (ch=='-')sign=,ch=nc();
- for (;ch>=''&&ch<='';ch=nc())x=x*+ch-'';
- if (sign)x=-x;
- }
- inline void read(ll &x){
- bool sign=; char ch=nc(); x=;
- for (;blank(ch);ch=nc());
- if (IOerror)return;
- if (ch=='-')sign=,ch=nc();
- for (;ch>=''&&ch<='';ch=nc())x=x*+ch-'';
- if (sign)x=-x;
- }
- inline void read(double &x){
- bool sign=; char ch=nc(); x=;
- for (;blank(ch);ch=nc());
- if (IOerror)return;
- if (ch=='-')sign=,ch=nc();
- for (;ch>=''&&ch<='';ch=nc())x=x*+ch-'';
- if (ch=='.'){
- double tmp=; ch=nc();
- for (;ch>=''&&ch<='';ch=nc())tmp/=10.0,x+=tmp*(ch-'');
- }
- if (sign)x=-x;
- }
- inline void read(char *s){
- char ch=nc();
- for (;blank(ch);ch=nc());
- if (IOerror)return;
- for (;!blank(ch)&&!IOerror;ch=nc())*s++=ch;
- *s=;
- }
- inline void read(char &c){
- for (c=nc();blank(c);c=nc());
- if (IOerror){c=-;return;}
- }
- //fwrite->write
- struct Ostream_fwrite{
- char *buf,*p1,*pend;
- Ostream_fwrite(){buf=new char[BUF_SIZE];p1=buf;pend=buf+BUF_SIZE;}
- void out(char ch){
- if (p1==pend){
- fwrite(buf,,BUF_SIZE,stdout);p1=buf;
- }
- *p1++=ch;
- }
- void print(int x){
- static char s[],*s1;s1=s;
- if (!x)*s1++='';if (x<)out('-'),x=-x;
- while(x)*s1++=x%+'',x/=;
- while(s1--!=s)out(*s1);
- }
- void println(int x){
- static char s[],*s1;s1=s;
- if (!x)*s1++='';if (x<)out('-'),x=-x;
- while(x)*s1++=x%+'',x/=;
- while(s1--!=s)out(*s1); out('\n');
- }
- void print(ll x){
- static char s[],*s1;s1=s;
- if (!x)*s1++='';if (x<)out('-'),x=-x;
- while(x)*s1++=x%+'',x/=;
- while(s1--!=s)out(*s1);
- }
- void println(ll x){
- static char s[],*s1;s1=s;
- if (!x)*s1++='';if (x<)out('-'),x=-x;
- while(x)*s1++=x%+'',x/=;
- while(s1--!=s)out(*s1); out('\n');
- }
- void print(double x,int y){
- static ll mul[]={,,,,,,,,,
- ,10000000000LL,100000000000LL,1000000000000LL,10000000000000LL,
- 100000000000000LL,1000000000000000LL,10000000000000000LL,100000000000000000LL};
- if (x<-1e-)out('-'),x=-x;x*=mul[y];
- ll x1=(ll)floor(x); if (x-floor(x)>=0.5)++x1;
- ll x2=x1/mul[y],x3=x1-x2*mul[y]; print(x2);
- if (y>){out('.'); for (size_t i=;i<y&&x3*mul[i]<mul[y];out(''),++i); print(x3);}
- }
- void println(double x,int y){print(x,y);out('\n');}
- void print(char *s){while (*s)out(*s++);}
- void println(char *s){while (*s)out(*s++);out('\n');}
- void flush(){if (p1!=buf){fwrite(buf,,p1-buf,stdout);p1=buf;}}
- ~Ostream_fwrite(){flush();}
- }Ostream;
- inline void print(int x){Ostream.print(x);}
- inline void println(int x){Ostream.println(x);}
- inline void print(char x){Ostream.out(x);}
- inline void println(char x){Ostream.out(x);Ostream.out('\n');}
- inline void print(ll x){Ostream.print(x);}
- inline void println(ll x){Ostream.println(x);}
- inline void print(double x,int y){Ostream.print(x,y);}
- inline void println(double x,int y){Ostream.println(x,y);}
- inline void print(char *s){Ostream.print(s);}
- inline void println(char *s){Ostream.println(s);}
- inline void println(){Ostream.out('\n');}
- inline void flush(){Ostream.flush();}
- #undef ll
- #undef OUT_SIZE
- #undef BUF_SIZE
- };
- int v[];
- int value[maxn][];
- int b[maxn][];
- struct node{
- int id;
- int num;
- node(int id,int num){this->id=id;this->num=num;}
- bool friend operator<(node a,node b){
- return a.num>b.num;
- }
- };
- priority_queue<node>pq[];
- void init(){
- for(int i=;i<=;i++){
- while(!pq[i].empty())pq[i].pop();
- }
- }
- int n,k,t;
- int main()
- {
- // std::ios::sync_with_stdio(false);
- //std::cin.tie(0);
- IO::read(t);
- while(t--){
- init();
- IO::read(n);IO::read(k);
- for(int i=;i<=k;i++)IO::read(v[i]);
- for(int i=;i<=n;i++){
- for(int j=;j<=k;j++){
- IO::read(value[i][j]);
- }
- pq[].push(node(i,value[i][]));
- for(int j=;j<=k;j++)IO::read(b[i][j]);
- }
- int ans=,ans1=-;
- while(ans!=ans1){
- ans1=ans;
- for(int i=;i<k;i++){
- while(!pq[i].empty()&&pq[i].top().num<=v[i]){
- int now=pq[i].top().id;
- pq[i].pop();
- pq[i+].push(node(now,value[now][i+]));
- }
- }
- while(!pq[k].empty()&&pq[k].top().num<=v[k]){
- ans++;
- int now=pq[k].top().id;
- pq[k].pop();
- for(int i=;i<=k;i++)v[i]+=b[now][i];
- }
- }
- IO::println(ans);
- for(int i=;i<=k;i++){
- if(i!=)IO::print(' ');
- IO::print(v[i]);
- }
- IO::print('\n');
- }
- return ;
- }
HDU 6396 Swordsman --------2018 Multi-University Training Contest 7 (模拟+读入挂)的更多相关文章
- hdu 4930 Fighting the Landlords--2014 Multi-University Training Contest 6
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4930 Fighting the Landlords Time Limit: 2000/1000 MS ...
- HDU 6143 - Killer Names | 2017 Multi-University Training Contest 8
/* HDU 6143 - Killer Names [ DP ] | 2017 Multi-University Training Contest 8 题意: m个字母组成两个长为n的序列,两序列中 ...
- HDU 6074 - Phone Call | 2017 Multi-University Training Contest 4
看标程的代码这么短,看我的.... 难道是静态LCA模板太长了? /* HDU 6074 - Phone Call [ LCA,并查集 ] | 2017 Multi-University Traini ...
- HDU 6068 - Classic Quotation | 2017 Multi-University Training Contest 4
/* HDU 6068 - Classic Quotation [ KMP,DP ] | 2017 Multi-University Training Contest 4 题意: 给出两个字符串 S[ ...
- HDU 6076 - Security Check | 2017 Multi-University Training Contest 4
/* HDU 6076 - Security Check [ DP,二分 ] | 2017 Multi-University Training Contest 4 题意: 给出两个检票序列 A[N], ...
- HDU 6071 - Lazy Running | 2017 Multi-University Training Contest 4
/* HDU 6071 - Lazy Running [ 建模,最短路 ] | 2017 Multi-University Training Contest 4 题意: 四个点的环,给定相邻两点距离, ...
- HDU 6078 - Wavel Sequence | 2017 Multi-University Training Contest 4
/* HDU 6078 - Wavel Sequence [ DP ] | 2017 Multi-University Training Contest 4 题意: 给定 a[N], b[M] 要求满 ...
- HDU 6070 - Dirt Ratio | 2017 Multi-University Training Contest 4
比赛时会错题意+不知道怎么线段树维护分数- - 思路来自题解 /* HDU 6070 - Dirt Ratio [ 二分,线段树 ] | 2017 Multi-University Training ...
- HDU 6036 - Division Game | 2017 Multi-University Training Contest 1
/* HDU 6036 - Division Game [ 组合数学,NTT ] | 2017 Multi-University Training Contest 1 题意: k堆石子围成一个圈,数量 ...
随机推荐
- web.xml 文件详解
目录 1. web.xml各版本区别 2. web.xml配置详解 2.1 java web项目启动加载顺序 2.2 web.xml中定义的元素 web.xml文件是Java Web项目中的一个配置文 ...
- Python 基础学习篇
注:技术尚浅,时间匆忙,如有错误或者不当之处值得商榷的,请留言,吾必思而改之. 第一篇 :Python基础- 安装/变量/输入/及循环语句使用 第二篇: Python基础- 常用数据类型 第三篇: ...
- ASP NET Core ---Automapper
官方文档:http://docs.automapper.org/en/stable/index.html 一.安装和配置: 二.使用: 1.建立 Profile文件: public class Map ...
- 孤荷凌寒自学python第二十七天python的datetime模块及初识datetime.date模块
孤荷凌寒自学python第二十七天python的datetime模块及初识datetime.date模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.datetime模块 dateti ...
- 【2017】KK English
2017/11/24 Regardless of the enormous amount of photos shared on Wechat or Face book, modern city dw ...
- LDA学习笔记
线性判别分析(Linear Discriminant Analysis,简称LDA)是一种经典的线性学习方法.其思想非常朴素,设法将样例投影到一条直线上,使得同类样例的投影点尽可能接近,异类的样例的投 ...
- pytorch下对简单的数据进行分类(classification)
看了Movan大佬的文字教程让我对pytorch的基本使用有了一定的了解,下面简单介绍一下二分类用pytorch的基本实现! 希望详细的注释能够对像我一样刚入门的新手来说有点帮助! import to ...
- CentOS修改IP地址
一.CentOS 修改IP地址修改对应网卡的IP地址的配置文件 # vi /etc/sysconfig/network-scripts/ifcfg-eth0 电信 # vi /etc/syscon ...
- 用archlinux作为日常开发机的感受
机器配置 CPU: Intel Core i5-6200U RAM: 8G Resolution: 1920x1080 我在arch下常用的软件 图形桌面环境 i3wm wifi无线管理 Networ ...
- redis的socket event loop
很早之前就因为nosql就听说了redis,直到去年才真正去了解,只能说相见恨晚. 因为数据库相关,我以为这应该是个庞然大物,万万没想到,源码不到2M,所以,我不知道该说啥了... 还是来点靠谱的: ...