HDU 6396(2018多校第七场1011) Swordsman
场上场下各种TLE到怀疑人生。。。经过大佬指点之后才知道要用fread才能过,一般的快读不行。。。
题意:一个剑客打小怪兽,有n头小怪兽,剑客和小怪兽有m个属性。只有剑客的m个属性都大于等于某个小怪兽的属性,才能击杀这个小怪兽(即属性全方位碾压才能击杀),每击杀一个小怪兽可以获得属性的加成,问最终击杀的小怪兽数量和最终的属性值。
思路:最终可以击杀的数量与击杀顺序无关(因为能击杀的早晚都会击杀),可以对小怪兽的m个属性排序,从小往大扫描,到剑客的该属性值停止,记录小怪兽出现的次数。如果某个小怪兽出现了m次,说明可以击杀,放入队列。每次循环开始时加上击杀小怪兽的增幅效果,队列为空时为最终答案。
fread! fread! fread! 重要的事情说3遍。
#include<bits/stdc++.h>
using namespace std;
const int maxn=100010;
typedef long long ll;
pair<int,int> b[6][maxn];
int a[6],c[6][maxn],n,m,s[6],cnt[maxn];
int pos,len;
char buf[1005]; int xchar()
{
if (pos == len)
pos = 0, len = fread(buf, 1, 1005, stdin);
return buf[pos++];
} int readint()
{
int x=0,s=1,c=xchar();
while (c <= 32)
c = xchar();
if (c == '-')
s = -1, c = xchar();
for (; isdigit(c); c = xchar())
x = x*10+c-'0';
return x*s;
} void add(int pos){
for(int i=1;i<=m;i++)
a[i]+=c[i][pos];
}
queue<int> q;
int main(){
// freopen("1.txt","r",stdin);
int T,ans=0;
// scanf("%d",&T);
T=readint();
while(T--){
ans=0;
memset(cnt,0,sizeof(cnt));
// scanf("%d%d",&n,&m);
n=readint(),m=readint();
for(int i=1;i<=m;i++){
a[i]=readint();
}
// scanf("%d",&a[i]);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
// scanf("%d",&b[j][i].first);
b[j][i].first=readint();
b[j][i].second=i;
}
for(int j=1;j<=m;j++){
// scanf("%d",&c[j][i]);
c[j][i]=readint();
}
}
for(int i=1;i<=m;i++)
sort(b[i]+1,b[i]+1+n);
for(int i=1;i<=m;i++){
s[i]=1;
}
for(int i=1,j;i<=m;i++){
for(j=s[i];b[i][j].first<=a[i]&&j<=n;j++){
cnt[b[i][j].second]++;
if(cnt[b[i][j].second]==m)
q.push(b[i][j].second);
}
s[i]=j;
}
while(!q.empty()){
add(q.front());
q.pop();
ans++;
for(int i=1,j;i<=m;i++){
for(j=s[i];b[i][j].first<=a[i]&&j<=n;j++){
cnt[b[i][j].second]++;
if(cnt[b[i][j].second]==m)
q.push(b[i][j].second);
}
s[i]=j;
}
}
printf("%d\n%d",ans,a[1]);
for(int i=2;i<=m;i++)
printf(" %d",a[i]);
printf("\n");
}
}
HDU 6396(2018多校第七场1011) Swordsman的更多相关文章
- HDU 6397(2018多校第8场1001) Character Encoding 容斥
听了杜教的直播后知道了怎么做,有两种方法,一种构造函数(现在太菜了,听不懂,以后再补),一种容斥原理. 知识补充1:若x1,x2,.....xn均大于等于0,则x1+x2+...+xn=k的方案数是C ...
- HDU 6395(2018多校第7场1010)Sequence
不久前做过POJ3070,所以知道这题要用矩阵快速幂优化,但是这个题的递推公式中有一项⌊p/n⌋,场上就不会了... 下来才知道要用分块矩阵快速幂,因为⌊p/n⌋最多有2√p块,可以对每一块使用快速幂 ...
- hdu多校第七场 1011 (hdu6656) Kejin Player 概率dp
题意: 一个游戏,有许多关,到下一关要花费金钱,做出尝试,有概率成功,若成功则到达下一关,若失败则停在此关或退回到前面某关,询问第l关到第r关的期望费用 题解: 显然,第r关到第l关的费用是dp[r] ...
- hdu 5288||2015多校联合第一场1001题
pid=5288">http://acm.hdu.edu.cn/showproblem.php?pid=5288 Problem Description OO has got a ar ...
- 可持久化线段树的学习(区间第k大和查询历史版本的数据)(杭电多校赛第二场1011)
以前我们学习了线段树可以知道,线段树的每一个节点都储存的是一段区间,所以线段树可以做简单的区间查询,更改等简单的操作. 而后面再做有些题目,就可能会碰到一种回退的操作.这里的回退是指回到未做各种操作之 ...
- Time Zone 【模拟时区转换】(HDU暑假2018多校第一场)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6308 Time Zone Time Limit: 2000/1000 MS (Java/Others) ...
- 2018多校第十场 HDU 6430 (线段树合并)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6430 题意:一棵树上每个节点权值为v[i],每个节点的heard值是:以它为LCA的两个节点的GCD的 ...
- 2014多校第七场1005 || HDU 4939 Stupid Tower Defense (DP)
题目链接 题意 :长度n单位,从头走到尾,经过每个单位长度需要花费t秒,有三种塔: 红塔 :经过该塔所在单位时,每秒会受到x点伤害. 绿塔 : 经过该塔所在单位之后的每个单位长度时每秒都会经受y点伤害 ...
- 2014多校第七场1003 || HDU 4937 Lucky Number
题目链接 题意 : 给定一个十进制n,让你转化成某个进制的数,让这个数只包含3 4 5 6这些数字,这个进制就成为n的幸运数字,输出有多少幸运数字,例如19,5进制表示是34,所以5是19的一个幸运数 ...
随机推荐
- 弹框内画echarts图dom元素无法获取的问题
弹框内画echarts图dom元素无法获取的问题? 什么意思呢?就是当我们打开弹框之后,此时要画eachars图,可是echarts图的容器dom此时为null, 因此我们需要做的就是在dom元素获取 ...
- Python3.6.0安装
1.安装 具体详情请参考下图: 双击安装包: 勾选“add python 3.6 to PATH”这样可以自动生成环境变量,选择“Customize installation”自定义安装. 2. ...
- canvas基础学习(二)
一.图像绘制 canvas绘制图像的方法是ctx.drawImage();该方法有三种使用方式 1.ctx.drawImage(img,x,y); img是指图像对象,x和y分别是这个图像左上角在ca ...
- TP上传图片
//更新 更新中的话,一定要写那一个if判断 public function update(){ $model = M('link'); $upload = new \Think\Upload();/ ...
- 程序员转项目管理之考证PMP
转行项目经历是IT人的出路之一,最近身边有好几个同事都在备考PMP,从个人未来职业发展来看,如果你有将来转行项目管理的想法,应该去尝试考一下PMP. PMP(Project Management Pr ...
- tyvj 2054 [Nescafé29]四叶草魔杖——最小生成树+状压dp
题目:http://www.joyoi.cn/problem/tyvj-2054 枚举点集,如果其和为0,则作为一个独立的块求一下最小生成树.因为它可以不和别的块连边. 然后状压dp即可. 别忘了判断 ...
- pt-query-digest工具的功能介绍了:
Ok,可以查看 pt-query-digest工具的功能介绍了: [root@472322 percona-toolkit-2.2.5]# pt-query-digest --help pt-quer ...
- GPIO编程2:使用GPIO监听中断完整程序
一个完整的使用GPIO捕捉中断的程序: #include<stdlib.h> #include<stdio.h> #include<string.h> #inclu ...
- setcookie函数的注意事项
函数说明 bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $pat ...
- 如果有多个集合的迭代处理情况【使用MAP】
在SQL开发过程中,动态构建In集合条件查询是比较常见的用法,在Mybatis中提供了foreach功能,该功能比较强大,它允许你指定一个集合,声明集合项和索引变量,它们可以用在元素体内.它也允许你指 ...