yzoj P2345 战争 题解

纯数论

30分:纯暴力,直接模拟判断t秒后,判断hp是否小于0

60分: atk>=h,就是一炮一个,那么军队会在min(n,t)秒之后停止攻击,那么总伤害就是a[n+(n-1)
+(n-2)+........(n-min(n,t)+1)

等差数列求和d=a(2n-min(n,t)+1)*(min(n,t))/2;

如果d>=hp Yes,否则No;

100分

考虑前t秒军队伤害总和,然后和hp比较大小
先算几下打死一个士兵,设m下
那么前m秒伤害为nma
m+1到2m秒伤害为m(n-1)a
以此类推
如果没有支援,那么可以到m(1)a
那么我们考虑支援,将其分开算
对于前面的时间段,每个时间段经历m秒,设k表示有几个经历了m秒的时间段,那么

k=min(n,t/m)

设k个时间段的伤害为d=ma(n)+ma(n-1)......ma(n-k+1)
等差数列求和d=(ma(2n-k+1)k)/2

如果(t/m)<n && t mod m !=0则还有一个时间段,经历了t mod m秒
伤害为(t mod m)(a)(n-k)加入中

最后判断d>=hp如果是输出Yes,否则输出No

代码

#include<bits/stdc++.h>
using namespace std;
int T,flag;
long long hp,atk,n,h,a,t,atck,tmp,k;
int main(){
    scanf("%d",&T);
    while(T){
        scanf("%lld %lld %lld %lld %lld %lld",&hp,&atk,&n,&h,&a,&t);
        tmp=h/atk;
        if(h%atk!=0)tmp+=1;
        k=min(n,t/tmp);
        atck=tmp*a*(2*n-k+1)*k/2;
        if(t/tmp<n&&t%tmp!=0){
            atck+=t%tmp*a*(n-k);
        }
        if(atck>=hp){
            printf("Yes\n");
        }
        else printf("No\n");
        T--;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/donkey2603089141/p/11416492.html

时间: 2024-10-15 19:35:28

yzoj P2345 战争 题解的相关文章

yzoj P1122 阶乘 题解

T组数据,给出N,求出N!最右边非零的数. 对于30%的数据,N <= 30,T<=10. 对于全部的数据,N <= 10^2009,T<=30. 一道数学题 解析 N!/(10^x)最后一位数字即是结果.10^x进行拆分,变成5^x* 2^x.怎么除以5^x呢,好办,乘的时候含有5的倍数的一项全部不乘进去,再递归此过程.即 1 2 3 4 (15) 6 7 8 9 (25) 11 12 13 14 (35)16 17 18 19 (45) 21 22 23 24 (55) 26

[USACO07OCT]障碍路线 &amp; yzoj P1130 拐弯 题解

题意 给出n* n 的图,A为起点,B为终点,* 为障碍,.可以行走,问最少需要拐90度的弯多少次,无法到达输出-1. 解析 思路:构造N * M * 4个点,即将原图的每个点分裂成4个点.其中点(i,j,k)表示在(i,j)时人的方向是k,然后对于两个点(i,j,k)和(i,j,kk),如果k和kk是两个旋转90度能转换的方向,就连一条边权为1的边,而对于(i,j,k)和(i+dx[ k],j+dy[k],k)连一条边权为0的边,表示从(i,j)在方向为k的情况下能向k方向走一步到达(i+dx

yzoj P2371 爬山 题解

背景 其实 Kano 曾经到过由乃?,当然这名字?看?主就是 Yuno 嘛.当年 Kano 看见了由乃?,内?突然涌出了?股杜甫会当凌绝顶,?览众??的 豪?,于是毅然决定登?.但是 Kano 总是习惯性乱丢垃圾,增重环卫?? 的负担,Yuno 并不想让 Kano 登?,于是她果断在?上设置了结界-- 题意 Yuno 为了?便登?者,在?上造了 N 个营地,编号从 0 开始.当结界发动时,每当第 $ i(> 0) $ 号营地内有?,那么他将被传送到第 $ A_i (< i) $ 号营 地,如此

yzoj P2344 斯卡布罗集市 题解

共t条街对于每一条街上有n个店铺(n可能不相同),每次只能选两端第一个营业的店铺采购,采购第i个店铺会获得幸福度ai,采购完后,这个店铺和它相邻的店铺便会关门,问最大幸福度? 考场想了一下dp,一开始想一维但发现不好处理,二维参数也没有想出来,于是便开始了我的暴力瞎搞之旅,我随手写了几个例子发现对于n为奇数无论怎么采购,幸福度是固定的为a1, a3 , a5........an于是便可以直接累加,然而对于n为偶数又怎么去处理呢?我也随手写了n为6,8,10的数据发现其实就只有三种情况. 第一种情

yzoj P2349 取数 题解

题意 1到n个自然数中选k个自然数要求两两不相邻,问有多少种方法,模m eg(1 3 5 ) 又是一道打表规律题,正常解法dp可以通过前缀和优化到O(N* K).另外我们可以重新定义F[I,J]表示从1到I中选择J个不连续数的方案数.通过考虑I选还是不选来进行状态转移. 1.如果不选I:则方案数为F[I-1,J]; 2.如果选I:由于不能选相邻两个数,所以I-1不能选,则剩余的J-1个数只能在1到I-2中选,即F[I-2,J-1]; f[i][j]=f[i-1][j]+f[i-2][j-1] (

yzoj 2372 小B的数字 题解

题意 判断是否存在一个序列 $ b_i $ 使得 $ \prod_{i = 1}^{n} b_i ?| b_i^{a_i}$ 恒成立,其中 $ b_i $ 中的每个数都是2的正整数次幂. 样例输入 3 2 3 2 3 3 3 3 2 1 10 样例输出 YES YES NO 数据范围 对于 100% 的数据有 $ n \leq 10^5,a_i \leq 10,T \leq 10$ 解析 首先拿到这道题,考场一看就知道不是规律题就是数学公式题,事实上是的. 我们可以设 $ b_i=2^{x_i}

题解 P2345 【奶牛集会】

题目 一道树状数组的题. 话说题目直接告诉做法是什么鬼? 首先这个题直接暴力是\(O(n^2)\)的,不能通过(评论里说可以?可能数据太水了,建议加强) 考虑优化,首先对于答案里的\(max\),可以直接通过排序优化掉,即把数据从小到大排序,每次更新答案的时候就直接使用当前的\(V\)就可以了. 之后看这个式子:\(|X_i - X j|\).单独看没有什么特点,但是如果我们对于\(i\),讨论一下\(j\),就可以发现规律.显然对于\(j\),可以分成两类,即\(\{j_1|X_{j1}<X_

【题解】战争系列-截获密文I

给你一个最短代码: #include <iostream> #include <string> int main(){ std::string str; std::cin >> str; for(int i = str.length()-2;i >= 0; i--) std::cout << str[i]; } 小细节:str.length()-1减掉的是'\0'哦~ 原文地址:https://www.cnblogs.com/xiao-l-xiao-s

BZOJ2150: 部落战争

题解: 把每个点拆成入点和出点,因为必须经过一次且只能经过一次.所以在两个点之间连一条上界=下界=1的边. 然后再s到每个入点连边,每个出点向t连边,点与点之间... 求最小流就可以过了... (感觉最小流神一般的存在...) 代码: 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 #inclu