首页 > 其他分享 >match's mistake

match's mistake

时间:2023-01-19 01:22:26浏览次数:53  
标签:count co int 血量 else ++ match mistake

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了,所以千万不能提前输出!千万不能提前输出!千万不能提前输出!

标签:count,co,int,血量,else,++,match,mistake
From: https://www.cnblogs.com/TFOREVERY/p/17060967.html

相关文章

  • 【nvidia-smi】Failed to initialize NVML: Driver/library version mismatch解决方法
      解决:    https://blog.csdn.net/private_void_main/article/details/128014317 ......
  • Matrix Matcher
    MatrixMatcher代码#include<bits/stdc++.h>usingnamespacestd;constintM=1005;usingull=unsignedlonglong;constullP1=131,P2=233;strings1[M],s2[M];......
  • LeetCode Top 100 Liked Questions 10.Regular Expression Matching (Java版; Hard)
    ​​welcometomyblog​​LeetCodeTop100LikedQuestions10.RegularExpressionMatching(Java版;Hard)题目描述Givenaninputstring(s)andapattern(p),im......
  • RuntimeError: The size of tensor a (4) must match the size of tensor b (3) at no
    报错RuntimeError:张量a的大小必须与张量b在非单例维度0上的大小匹配换言之:通道数不同,本代码中使用png图片(四通道图片)png图片比jpg多了一个Alpha通道,一个RGB颜色模型......
  • match's mistake-5
    狠狠地切割(HardVersion)(https://www.luogu.com.cn/problem/P8889)跟easy版非常像,但是数据太大开标记数组的话会爆所.以得转换一下开一个map<longlong,int>作为标记就......
  • match's mistake-4
    翻硬币(https://www.luogu.com.cn/problem/P8597)说实话第一眼看过去的时候我就想复杂了,然后冥思苦想好久都没结果到结束后再回来想想最小次数,那就说明每个硬币最多只能翻......
  • match's mistake - 3
    等差数列(https://www.luogu.com.cn/problem/P8682)第一眼下去,好简单,结果交上去一个t,三个wa,还是不能小看蓝桥杯的模拟的废话不多说,开始解读题目首先题目很容易理解,给定一......
  • 迁移学习(MixMatch)《MixMatch: A Holistic Approach to Semi-Supervised Learning》
    论文信息论文标题:MixMatch:AHolisticApproachtoSemi-SupervisedLearning论文作者:DavidBerthelot,NicholasCarlini,IanGoodfellow,NicolasPapernot,Avital......
  • match's mistake-3
    乘法表(https://www.luogu.com.cn/problem/P8723)小题一道但是得注意几点1.给定的数据范围不存在第三位数2.不只是结果大于十的得转化字母乘法中的也要转化(如1010=91应......
  • match's mistake-2
    走方格(https://www.luogu.com.cn/problem/P8707)理解一下题目1.行和列都是偶数的时候不能走,问有多少种到达终点的方法看到题目的一瞬间,第一时间想到广搜,结果t了~悲伤~。......