Survivor

(https://codeforces.com/group/L9GOcnr1dm/contest/422378/problem/F)

血的教训

比较有意思的一个贪心题

简单翻译一下题目:
输入第一行n,m,k;分别代表有几个人,几分钟,和总共能治疗的次数
输入第二行n个数,代表他们个别的初始血量
第三行n个数,代表每分钟他们会被扣掉的血
第四行,代表如果你用技能可以给这个人加多少血
问你,最后一共能活多少个人

看到题目第一想法就是用每轮加的血量去比较能不能救活,毫无列外t了(没看好k的数据范围,到1e11了

code

while (1){
co++;
for (int i = 1; i <= n; i++) {
toadd[i]+=ad[i];
if(toadd[i] + hp[i] > 0 && !vis[i]){
k-=co;
if(k >= 0){
count++,vis[i] = true;
}
}
}
if(co >= k || k == 0){
cout << count << endl;
return 0;
}
}
既然t了那换个思路。首先人得活到m分钟后,也就是说连带加血,你m分钟后的血量一定得大于0。那么就是计算出m分钟后他们所剩的血量,然后用这个血量去除于每次他们每个人能加的血量再加上1,就是他们m分钟后需要治疗多少次就能存活了
这里注意三点,一:有可能他们m分钟后血量还是正的。二:有可能m分钟后他们的血量刚好为0。三:为啥要加1呢,如果他们的剩余的血量刚好可以整除他们每次加的血量,那么治疗后他们的血量刚好是0,依旧是不能活的

Acode

ll count = 0;
vector<ll> co(n+1);
co[0] = -1;
for (int i = 1; i <= n; i++) {
if(hp[i] > 0)co[i] = 0;
else if(hp[i] == 0)co[i] = 1;
else co[i] = abs(hp[i])/ad[i]+1;
}
sort(co.begin(),co.end(),cmp);
for (int i = 1; i <= n; i++) {
k -= co[i];
if(k >= 0)count++;
else break;
}
cout << count << endl;

还有一个特别有意思的

wacode

ll count = 0;
vector<ll> co(n+1);
co[0] = -1;
for (int i = 1; i <= n; i++) {
if(hp[i] > 0)co[i] = 0;
else if(hp[i] == 0)co[i] = 1;
else co[i] = abs(hp[i])/ad[i]+1;
}
sort(co.begin(),co.end(),cmp);
for (int i = 1; i <= n; i++) {
k -= co[i];
if(k >= 0)count++;
else {
cout << count << endl;
return 0;
}
}

两个代码相差很小,但是由于提前输出就给wa了,所以千万不能提前输出!千万不能提前输出!千万不能提前输出!

Survivor的更多相关文章

  1. JVM内存结构之二--新生代及新生代里的两个Survivor区(下一轮S0与S1交换角色,如此循环往复)、常见调优参数

    一.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我 ...

  2. JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释

    以下内容转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29632145&id=4616836 jvm区域总体分两 ...

  3. JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释(转)

    jvm区域总体分两类,heap区和非heap区.heap区又分:Eden Space(伊甸园).Survivor Space(幸存者区).Tenured Gen(老年代-养老区). 非heap区又分: ...

  4. 为什么新生代内存需要有两个Survivor区

    转载自:http://blog.csdn.net/antony9118/article/details/51425581 在JVM的新生代内存中,为什么除了Eden区,还要设置两个Survivor区? ...

  5. JVM(六)为什么新生代有两个Survivor分区?

    本文会使用排除法的手段,来讲解新生代的区域划分,从而让读者能够更清晰的理解分代回收器的原理,在开始之前我们先来整体认识一下分代收集器. 分代收集器会把内存空间分为:老生代和新生代两个区域,而新生代又会 ...

  6. JVM内存结构--新生代及新生代里的两个Survivor区(下一轮S0与S1交换角色,如此循环往复)、常见调优参数

    一.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我 ...

  7. JVM内存区域划分Eden Space,Survivor Space,Tenured Gen,Perm Gen

    jvm区域总体分两类,heap区和非heap区.heap区又分:Eden Space(伊甸园).Survivor Space(幸存者区).Tenured Gen(老年代-养老区). 非heap区又分: ...

  8. JVM内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)

    JVM区域总体分两类,heap区和非heap区.heap区又分为: Eden Space(伊甸园). Survivor Space(幸存者区). Old Gen(老年代). 非heap区又分: Cod ...

  9. JVM虚拟机20:内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)

    1.内存区域划分 根据我们之前介绍的垃圾收集算法,限定商用虚拟机基本都采用分代收集算法进行垃圾回收.根据对象的生命周期的不同将内存划分为几块,然后根据各块的特点采用最适当的收集算法.大批对象死去.少量 ...

  10. JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释 (生动形象)

    [转自]:https://blog.csdn.net/sd4015700/article/details/50109939 jvm区域总体分两类,heap区和非heap区.heap区又分:Eden S ...

随机推荐

  1. SpringBoot - Lombok使用详解4(@Data、@Value、@NonNull、@Cleanup)

    六.Lombok 注解详解(4) 8,@Data (1)@Data 是一个复合注解,用在类上,使用后会生成:默认的无参构造函数.所有属性的 getter.所有非 final 属性的 setter 方法 ...

  2. home:76 Uncaught TypeError: AMap.MouseTool is not a constructor

    利用高德地图API标记已知点并测量已知点之间的距离,在调用高德地图的类方法的时候会遇到这样的问题 home:76 Uncaught TypeError: AMap.MouseTool is not a ...

  3. jsp第8个作业

    public boolean addMail(Msg msg){ Statement st =null; Connection con=null; try{ //获取连接 con = getConne ...

  4. input类型为number仍可以输入e,+,-解决方法

    <input type="number" onKeypress="return(/[\d\.]/.test(String.fromCharCode(event.ke ...

  5. 【omr】linux配置omr识别项目moonlight环境

    最近又做了第n次moonlight的环境配置 moonlight是相对成熟的omr系统 这里记录环境配置的基本步骤 (总的来说主要是用conda新建符合程序要求的python版本 然后装好bazel和 ...

  6. strtok实现想到的...

    1.实现容易,实现的方法很难想到 比如strtok函数 /* 获取第一个子字符串 */ token = strtok(str, s); /* 继续获取其他的子字符串 */ while( token ! ...

  7. ClassLoader 双亲委派

    一个程序有一个默认的appClassLoader.类不是由被调用者也不是被自身加载的,正常情况下是被默认的AppClassLoader加载的. System.out.println(test3.cla ...

  8. Apache和Nginx有什么区别,如何选择?

    Apache和Nginx都是大名鼎鼎的Web服务器软件. 网上已经有非常多关于apache和nginx区别的文章了,笔者就不从专业技术的角度进行解说,而按照目前比较流行的架构方式进行阐述. 1.安全性 ...

  9. python内置函数open()

    open()函数 介绍 open()函数用于打开文件并创建文件对象. open()函数的语法格式: file = open(filename, mode='r', buffering=-1, enco ...

  10. IntelliJ IDEA 下载安装及配置使用教程(图文步骤详解)

    前言 壹哥在前面的文章中,带大家下载.安装.配置了Eclipse这个更好用的IDE开发工具,并教会了大家如何在Eclipse中进行项目的创建和代码编写.运行.但是实际上,在各种IDE开发工具中,Ecl ...