IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 2022牛客寒假第二场 小沙的炉石(思维) -> 正文阅读

[数据结构与算法]2022牛客寒假第二场 小沙的炉石(思维)

题目链接:点击这里

题目大意:
初始时,你有 1 1 1 点体力;有 n n n 张攻击牌,每张攻击牌可以消耗 1 1 1 点体力并造成 1 1 1 点基础伤害;有 m m m 张法术牌,每张牌恢复 1 1 1 点体力(体力 无上限);每次使用一张牌后会使之后的攻击牌增加 1 1 1 点伤害,求是否可以使用这些牌恰好造成 k k k 点伤害

题目分析:
我们不妨设 n ≤ m + 1 n\le m+1 nm+1 (若 n > m + 1 n>m+1 n>m+1 时可以看作 n = m + 1 n=m+1 n=m+1 ,因为多余的攻击牌会因缺少体力而无法使用)
我们发现如果采取 攻 击 牌 , 法 术 牌 , 攻 击 牌 , 法 术 牌 . . . . . . 攻击牌,法术牌,攻击牌,法术牌...... ...... 这样的出牌顺序会使造成的伤害最小,造成的伤害为 ∑ i = 1 n 2 i ? 1 = n 2 \sum_{i=1}^n2i-1=n^2 i=1n?2i?1=n2
如果采用 法 术 牌 , 法 术 牌 . . . . . . , 攻 击 牌 , 攻 击 牌 . . . . . . 法术牌,法术牌......,攻击牌,攻击牌...... ............ 这样的出牌顺序会使造成的伤害最大,造成的伤害为 ∑ i = 1 n ( m + i ) = m n + n ( n + 1 ) 2 = n ( 2 m + n + 1 ) 2 \sum_{i=1}^n(m+i)=mn+\frac{n(n+1)}{2}=\frac{n(2m+n+1)}{2} i=1n?(m+i)=mn+2n(n+1)?=2n(2m+n+1)?
我们可以通过法术牌和攻击牌的使用顺序使得伤害值可以取到上下界中的所有值,因为我们可以先算出造成 k k k 点伤害至少需要的牌数 x = k x=\sqrt k x=k ? ,然后跟 n n n 取一下最小值,然后再看 x x x 能造成的最大伤害是否大于 k k k 即可

具体细节见代码:

//#pragma GCC optimize(2)
//#pragma GCC optimize("Ofast","inline","-ffast-math")
//#pragma GCC target("avx,sse2,sse3,sse4,mmx")
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<set>
#include<map>
#include<stack>
#include<queue>
#include<unordered_map>
#define ll long long
#define inf 0x3f3f3f3f
#define Inf 0x3f3f3f3f3f3f3f3f
#define int  ll
#define endl '\n'
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
using namespace std;
int read()
{
	int res = 0,flag = 1;
	char ch = getchar();
	while(ch<'0' || ch>'9')
	{
		if(ch == '-') flag = -1;
		ch = getchar();
	}
	while(ch>='0' && ch<='9')
	{
		res = (res<<3)+(res<<1)+(ch^48);//res*10+ch-'0';
		ch = getchar();
	}
	return res*flag;
}
const int maxn = 1e6+5;
const int mod = 1e9+7;
const double pi = acos(-1);
const double eps = 1e-8;
int n,m,k;
signed main()
{
	n = read(),m = read();
	n = min(n,m+1);
	int t = read();
	while(t--)
	{
		k = read();
		int x = sqrt(k);
		x = min(x,n);
		if(x*(2*m+x+1)/2 >= k) puts("YES");
		else puts("NO");
	}
	return 0;
}


  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-02-04 11:17:09  更:2022-02-04 11:18:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 17:46:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码