博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces - 102222H - Fight Against Monsters - 贪心
阅读量:5329 次
发布时间:2019-06-14

本文共 2235 字,大约阅读时间需要 7 分钟。

题意:有一堆怪兽,怪兽有HP和ATK。你有一个英雄,英雄每次先被所有怪兽打,然后打其中一个怪兽。打的伤害递增,第一次1,第二次2,以此类推。
为什么感觉是贪心呢?证明一波。

首先开始打一个怪兽肯定一直打到死为止。那么打死他要求的次数可以二分出来(其实暴力也可以)。两只怪兽交换打的顺序会不会变好?

先打第一只怪兽:

\(num_1*sumatk+num_2*(sumatk-atk_1)\)

先打第二只怪兽:

\(num_2*sumatk+num_1*(sumatk-atk_2)\)

那么什么情况下先打第二只会更好呢?当然是上式大于下式:

\(num_1*sumatk+num_2*(sumatk-atk_1)>num_2*sumatk+num_1*(sumatk-atk_2)\)

化简:

\(num_1*atk_2>num_2*atk_1\)

当上式成立时需要交换。

插进优先队列里面一搞,又不会爆longlong。一波搞定。

#include
using namespace std;typedef long long ll;inline int read() { int x=0; int f=0; char c; do { c=getchar(); if(c=='-') f=1; } while(c<'0'||c>'9'); do { x=(x<<3)+(x<<1)+c-'0'; c=getchar(); } while(c>='0'&&c<='9'); return f?-x:x;}inline void _write(int x) { if(x>9) _write(x/10); putchar(x%10+'0');}inline void write(int x) { if(x<0) { putchar('-'); x=-x; } _write(x); putchar('\n');}void TestCase(int ti);int main() {#ifdef Yinku freopen("Yinku.in","r",stdin); //freopen("Yinku.out","w",stdout);#endif // Yinku int T=read(); for(int ti=1;ti<=T;ti++) TestCase(ti);}/*--- ---*/inline int s1(int x){ return ((x+1)*x)>>1;}struct Monster{ int hp; int atk; int num; inline void calc(){ int l=1,r=1000,m; while(1){ m=l+r>>1; if(m==l){ int s=s1(l); if(s>=hp){ num=l; return; } else{ num=r; return; } } int s=s1(m); if(s==hp){ num=m; return; } else if(s
=m.atk*num); }}monster;priority_queue
pq;void TestCase(int ti) { ll sumatk=0; int n=read(); for(int i=1;i<=n;i++){ monster.hp=read(); monster.atk=read(); sumatk+=monster.atk; monster.calc(); pq.push(monster); } ll sumdamage=0; while(!pq.empty()){ monster=pq.top(); pq.pop(); sumdamage+=sumatk*monster.num; sumatk-=monster.atk; } printf("Case #%d: %lld\n",ti,sumdamage);}

转载于:https://www.cnblogs.com/Yinku/p/11037486.html

你可能感兴趣的文章
oracle job
查看>>
Redis常用命令
查看>>
XML学习笔记(二)-- DTD格式规范
查看>>
IOS开发学习笔记026-UITableView的使用
查看>>
[转载]电脑小绝技
查看>>
windos系统定时执行批处理文件(bat文件)
查看>>
thinkphp如何实现伪静态
查看>>
BZOJ 2243: [SDOI2011]染色( 树链剖分 )
查看>>
BZOJ 1925: [Sdoi2010]地精部落( dp )
查看>>
c++中的string常用函数用法总结!
查看>>
界面交互之支付宝生活圈pk微信朋友圈
查看>>
[DLX精确覆盖+打表] hdu 2518 Dominoes
查看>>
SuperMap iServerJava 6R扩展领域开发及压力测试---判断点在那个面内(1)
查看>>
Week03-面向对象入门
查看>>
一个控制台程序,模拟机器人对话
查看>>
web.xml 中加载顺序
查看>>
pycharm激活地址
查看>>
hdu 1207 四柱汉诺塔
查看>>
Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(上篇——纯前端多页面)
查看>>
display:none与visible:hidden的区别
查看>>