历史上的今天(history)+ 勇者斗恶龙(dragon)

朋友们我来了,好久都没有更新了,手实在痒痒,不撸两道,内心过意不去
在这里插入图片描述

文章目录

  • A:历史上的今天(history)
    • 题目
    • 题解
    • 代码实现
  • B: 勇者斗恶龙(dragon)
    • 题目描述
    • 题解
    • 代码实现

A:历史上的今天(history)

题目

小 P 是一个普通的高中生。自从进入高中以来,作业一天比一天多,每天都要熬夜赶作业。
而今天,他还需要多做一件事情——为明天历史课准备上课前三分钟的《历史上的今天》演讲稿。
小 P 十分喜欢研究历史,他的电脑里存了 个他最喜欢的历史事件,每个历史事件都由年,月,日以及事件名称构成。由于小 P 整理资料时有一些混乱,所以历史事件中可能有未来(当前时间点并没有发生过)的事件。
现在,为了准备演讲稿,小 P 急需知道有多少历史事件发生在历史上的明天。然而他喜欢的历史事件实在是太多了,以至于难以查找。 你能够帮助他吗?

一个事件发生在历史上的当天,当且仅当该事件发生在当天或当天之前,且除年份以外,月份和天数在数值上都相同。 你需要按照时间顺序从小到大输出这些历史事件的名称。数据保证不存在发生在同一天的两个历史事件,但可能存在两个事件名称相同。

输入格式
第一行一个字符串 date0,表示今天的日期。
第二行一个整数 n,表示小 P 喜欢的历史事件的数量。
接下来 n 行,每行两个字符串 datei, namei,分别表示第 i 个历史事件发生的日期,以及该历史事件的名称。
字符串 datei (0 <= i <= n)的格式为 year.month.day 即三个数 year, month, day 分别为年份,月份,天数的数值,中间用.隔开,且保证当前日期一定合法。
为了读入方便,我们规定 year, month, day 的位数分别严格为 4位,2位,2位,不足该位数的用 0 补齐。例如,2019年九月九日表示为2019.09.09,2020年七月二十四日表示为2020.07.24。
字符串namei (1 <= i <= n)保证只由数字(0-9),小写字母(a-z),大写字母(A-Z),以及下划线(_)构成,长度不超过40。

输出格式
第一行一个数字 k(1 <= k <= n) ,表示满足条件的历史事件的数量。
接下来 k 行,每行一个字符串 namei ,表示你认为时间第 i 小的符合上述条件的历史事件的名称。
如果没有任何满足要求的历史事件,输出第一行即可。

样例
样例1
2019.09.09
5
2019.10.07 Double_Ninth_Festival
2020.07.24 The_2020_Tokyo_Olympic_Games
2019.09.10 35th_Teachers_day
2022.02.04 The_2022_Beijing_Olympic_Winter_Games
1985.09.10 Chinese_Teachers_day
样例1
2
Chinese_Teachers_day
35th_Teachers_day
样例2
2019.11.16
7
2017.11.16 Tiw_AK_NOIP2017
2018.11.16 Tiw_AK_NOIP2018_day1
2018.11.17 Tiw_AK_NOIP2018_day2
2019.11.17 Tiw_AK_CSP2019_day2
2019.11.16 Tiw_AK_CSP2019_day1
2020.11.17 Tiw_AK_CSP2020_day2
2020.11.16 Tiw_AK_CSP2020_day1
样例2
2
Tiw_AK_NOIP2018_day2
Tiw_AK_CSP2019_day2
样例3
2024.10.31
20
0401.11.01 history
1539.11.01 history
0259.11.01 history
1955.11.01 history
0663.11.01 history
0372.11.01 history
0270.11.01 history
0047.11.01 history
0465.11.01 history
0036.11.01 history
1188.11.01 history
1367.11.01 history
1142.11.01 history
1820.11.01 history
0058.11.01 history
0153.11.01 history
0557.11.01 history
1959.11.01 history
1074.11.01 history
0152.11.01 history
样例3
20
history
history
history
history
history
history
history
history
history
history
history
history
history
history
history
history
history
history
history
history
数据范围与提示
【样例 1 解释】
只有第 3 个和第 5 个历史事件满足条件。
注意要按照时间顺序从小到大输出,未来的时间点应该直接忽视掉。
【样例 2 解释】
综上可以得出结论:历史总是惊人的相似。
在这里插入图片描述

题解

这道题完全就是一个纯粹的模拟,
处理出来所有日期是历史上的明天的i,再判断年份是不是已经发生
丢到一个数组里面排序输出就好了

唯一麻烦的就是处理一下明天的特殊性,
比如刚好是二月,刚好是闰年,刚好是一个月的最后一天,刚好是一年的最后一个月…
本来是一道简单的模拟,硬生生掰成了手打if-else
在这里插入图片描述
送你一个小秘籍→
在这里插入图片描述

代码实现

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define MAXN 10005
struct node {int year, num;
}result[MAXN];
int n, tot, year, month, day;
string opt;
string name[MAXN], date[MAXN];bool run ( int a ) {if ( ( a % 4 == 0 && a % 100 != 0 ) || ( a % 400 == 0 && a % 3200 != 0 ) )return 1;return 0; 
}void init () {day ++;if ( month == 2 ) {if ( run ( year ) ) {if ( day == 30 ) {month = 3;day = 1;}}else {if ( day == 29 ) {month = 3;day = 1;}}}else {if ( month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12 ) {if ( day == 32 ) {month ++;day = 1;}}else {if ( day == 31 ) {month ++;day = 1;}}}if ( month == 13 ) {month = 1;year ++;}
}bool cmp ( node x, node y ) {return x.year < y.year;
}int main() {cin >> opt;int len = opt.length();for ( int i = 0;i < len;i ++ ) {if ( i < 4 )year = year * 10 + ( opt[i] - '0' );if ( i >= 5 && i <= 6 )month = month * 10 + ( opt[i] - '0' );if ( i >= 8 && i <= 9 )day = day * 10 + ( opt[i] - '0' );}init ();scanf ( "%d\n", &n );for ( int i = 1;i <= n;i ++ ) {cin >> date[i] >> name[i];int y = 0, m = 0, d = 0;for ( int j = 0;j < len;j ++ ) {if ( j < 4 )y = y * 10 + ( date[i][j] - '0' );if ( j >= 5 && j <= 6 )m = m * 10 + ( date[i][j] - '0' );if ( j >= 8 && j <= 9 )d = d * 10 + ( date[i][j] - '0' );}if ( m == month && d == day && y <= year ) {result[++ tot].year = y;result[tot].num = i;}}sort ( result + 1, result + tot + 1, cmp );printf ( "%d\n", tot );for ( int i = 1;i <= tot;i ++ )cout << name[result[i].num] << endl;return 0;
} 

B: 勇者斗恶龙(dragon)

题目描述

现在有一条 n 头龙,生命值为 h,勇士想要打败这条作恶多端的龙。
在这里插入图片描述
勇士攻击第 i 个头会造成 min(h,atki) 点伤害,即龙的生命值减少 min(h,atki) 点;但龙的第 i 个头受到伤害后会恢复 di 点生命值,即生命值增加 di 。 勇士无法重复攻击同一个头,即他对于每个头最多只能攻击一次。当龙的生命值为 o 时则视为被勇士打败,此时它不能再恢复生命值了。 勇士想要知道他是否能打败这头龙,如果能打败最少需要攻击多少次。

输入格式
第一行包含两个整数 n,h,分别表示龙的头的数量和龙的生命值。
接下来 n 行,每行两个整数atki,di,含义见【题目描述】。
输出格式
第一行输出 Yes 或 No,表示勇士是否能击败恶龙若能击败。
如果能打败,在第二行输出一个整数,表示打败这头龙所需的最小攻击次数。

样例
样例1
3 5
2 3
2 0
1 0
样例1
Yes
3
样例2
3 6
2 3
2 0
1 0
样例2
No
【样例 1 解释】 只要最后一次攻击第一个头,就能刚好击败恶龙。
数据范围与提示
在这里插入图片描述

题解

首先这道题很好想的就是贪心
按照atki-di从大到小排序,这样越靠前的i对巨龙的伤害越高,答案个数也就能越小
做到这就能85分了

然后就去枚举最后一击,那么如果打其他头造成的攻击力为atki-di
因为其他攻击都打不死它,
在这里插入图片描述
这里就可以找到一种贪心策略
首先将所有头按照atki-di从大到小排序,
然后每次固定一个头后找出至少需要前面多少个头atki-di之和相加大于h-atkx,x是你选中的最后一击,
时间复杂度n2

这样肯定是TLE,于是我们考虑优化,我们可以排序后统计
出atki-di的前缀和si,那么我们只需要针对h-atki和sx-1大小关系分类讨论二分即可,
时间复杂度nlogn

但是这里也只有95
还有你会发现,这个时候处理出来的s数组并不具有单调性
二分很危险!!!
在这里插入图片描述
其实atki ≤ di的情况是根本不需要的,
它对于答案只会增加恶龙的生命值,我们要把它排除掉,i - -,n - -
这个时候s数组就会具有单调性了

问题又来了,很有可能最后一击atkx ≤ di
但是恶龙在被攻击后就生命值0了,题意说这个时候它无法回血,
这就意味着,这最后一击很有可能在上面被我们自作聪明地排除掉

所以我们就不能i - -,n - -,直接在s数组上动手脚就可以了

解决完这些问题后,注意到一组特判
看好h的数据范围,有可能为0,
这意味着有可能刚一上场,恶龙就被吓得尿尿了
在这里插入图片描述
你的答案就应该是0而不是1

代码实现

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
#define MAXN 300005
#define LL long long
#define INF 0x7f7f7f7f
int n, h, result = INF, inter;
LL s[MAXN];struct node {LL atk, d;
}a[MAXN];bool cmp ( node x, node y ) {return x.atk - x.d > y.atk - y.d;
}void solve ( int l, int r, LL val ) {if ( l > r ) return;int mid = ( l + r ) >> 1;if ( s[mid] >= val ) {inter = min ( inter, mid );if ( l == mid ) return;solve ( l, mid, val );}else solve ( mid + 1, r, val );
}int main() {scanf ( "%d %d", &n, &h );for ( int i = 1;i <= n;i ++ )scanf ( "%lld %lld", &a[i].atk, &a[i].d );if ( h == 0 ) return ! printf ( "Yes\n0" );sort ( a + 1, a + n + 1, cmp );for ( int i = 1;i <= n;i ++ )if ( a[i].atk <= a[i].d ) s[i] = s[i - 1];else s[i] = s[i - 1] + a[i].atk - a[i].d;for ( int i = 1;i <= n;i ++ ) { inter = INF;if ( h <= a[i].atk ) return ! printf ( "Yes\n1" );solve ( 1, i - 1, h - a[i].atk );result = min ( result, inter + 1 );}if ( result == INF )printf ( "No" );elseprintf ( "Yes\n%d", result );return 0;
}

好了,今天就先制作这两道吧,几天后再完成后面两道
有任何问题欢迎指出,也可以给我建议写博客的一些小细节。我们下期再见。。。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round #694 Div. 2

Codeforces Round #694 Div. 2 CodeForces 1471A Strange Partition CodeForces 1471B Strange List CodeForces 1471C Strange Birthday Party 签到题 稍有难度 CodeForces 1471D Strange Definition CodeForces 1471E Strange Shuffle CodeForces 1471F Strange Housing

领域驱动设计,让程序员心中有码(四)

#领域驱动设计&#xff0c;让程序员心中有码&#xff08;四&#xff09;----------------------追忆有关分层的古老往事我一直认为&#xff0c;程序员也是艺术家&#xff0c;他们撰写的每一行代码&#xff0c;是献给这大好世界的优美诗篇。不同的人&#xff0c;写的代码也许风格…

YBTOJ洛谷P4551:最长异或路径(trie树)

洛谷传送门 文章目录题目描述解析代码题目描述 解析 本题关键就在于一点&#xff1a; 若把每个点的深度dep[i]定义为从根到节点边权的异或和 那么i到j的路径异或和可以表示为&#xff1a; dep[i] ^ dep[j] 首先要是i、j在不同子树上显然成立 如果他们在同一子树上&#xff0c;…

P5074-Eat the Trees【插头dp】

正题 题目链接:https://www.luogu.com.cn/problem/P5074 题目大意 给出一个nmn\times mnm的网格&#xff0c;有的必须铺线有的不能&#xff0c;铺成若干条闭合回路&#xff0c;求方案数。 1≤n,m≤121\leq n,m\leq 121≤n,m≤12 解题思路 考虑插头dpdpdp&#xff0c;因为可以…

初赛—算法复杂度

对于 \(T(n) a\times T(\frac{n}{b})c\times n^k\) 这样的递归关系&#xff0c;有这样的结论&#xff1a; \(a>b^k\) 则有 &#xff1a; \(T(n) O(c\times n^{\log_{b} a})\)\(ab^k\) 则有 &#xff1a; \(T(n) O(c\times n^k\times log n)\)\(a<b^k\) 则有 &#xff…

1414. 牛异或

题意&#xff1a; 区间长度为n的数组a&#xff0c;取连续一段子序列&#xff0c;问哪段子序列的异或和最大&#xff0c;如果存在多个这样的序列&#xff0c;那么选择序列末端整数对应的编号更小的那个序列。 如果仍然存在多个可选的序列&#xff0c;那么选择长度最短的那个序列…

基于Asp.Net Core打造轻量级内部服务治理RPC(一)

继之前的《Asp.Net Core Docker 搭建》文章末尾说过的&#xff0c;将陆续编写基于asp.net core 打造一个内部服务治理的rpc框架。不过前端时间较忙&#xff0c;所以搁置了一段时间。闲话不多说&#xff0c;下面就来讲讲为什么需要去做一个该框架&#xff0c;以及想法的来源和设…

P7046-「MCOI-03」诗韵【SAM,倍增,树状数组】

正题 题目链接:https://www.luogu.com.cn/problem/P7046 题目大意 给出一个长度为 nnn 的字符串&#xff0c;然后 mmm 次把它的一个子串加入集合。如果一个字符串在这个集合中作为字符串的后缀出现次数大于 kkk 那么这个字符串就会被计入贡献。 每次求计入贡献的字符串数和最…

YBTOJ:前缀询问(trie树)

文章目录题目描述解析代码题目描述 解析 &#xff08;没有做出来&#xff0c;这个ans的处理方式其实也不难想…qwq&#xff09; 考虑把T都作为模板串加入trie树 加入每个模板串自然就是按照i顺序的 所以我们在插入t的时候沿途标记一下 新出现的未标记的i的间隔就是当前的i与上…

DP专练1( [NOIP 2003]加分二叉树 + 太空梯 )

我们先慢慢来加分二叉树题目题解简单讲解前序//中序//后序遍历代码实现太空梯题目题解代码实现加分二叉树 题目 题解 简单讲解前序//中序//后序遍历 其实说白了&#xff0c;这个*序就是根root的遍历顺序 先序就是root–>left–>right 中序就是left–>root–>rig…

P1896 [SCOI2005]互不侵犯

P1896 [SCOI2005]互不侵犯 题目&#xff1a; 在NN的棋盘里面放K个国王&#xff0c;使他们互不攻击&#xff0c;共有多少种摆放方案。国王能攻击到它上下左右&#xff0c;以及左上左下右上右下八个方向上附近的各一个格子&#xff0c;共8个格子。 题解&#xff1a; 需要知道…

AT2368-[AGC013B]Hamiltonish Path【构造】

正题 题目链接:https://www.luogu.com.cn/problem/AT2368 题目大意 给出 nnn 个点 mmm 条边的一张无向图&#xff0c;然后求一条路径满足 路径长度不小于二。路径无交。对于所有的 xxx 与路径的端点相连&#xff0c;那么 xxx 在路径上。 1≤n,m≤1051\leq n,m\leq 10^51≤n,…

YBTOJ:运动积分(trie树)

文章目录题目描述解析代码题目描述 解析 做了巨长时间… 进行了一次刺激的阅读理解竞赛… 感谢whh dalao&#xff01; 那么让我们分析一下这道题 首先我们考虑单个求x选手的q值 不难发现 i 在第j天和x的大小关系只与a[x]与a[i]二进制下不同的最高位k有关 j的第k位与x相同时&am…

年终总结,我为什么离开舒适区?

当圣诞夜过去&#xff0c;也意味着这一年即将结束&#xff0c;迎来崭新的开始&#xff0c;一年时间既短暂&#xff0c;又漫长&#xff0c;当离开人生的舒适区&#xff0c;将迎来一个又一个的挑战。如果说一个人的优秀&#xff0c;取决于他天赋&#xff0c;以及他为之付出的额外…

NC16886 炮兵阵地

题目&#xff1a; n*m个网格&#xff0c;有平原&#xff0c;有山地&#xff0c;平原可以放部队&#xff0c;部队攻击范围如图&#xff08;不受地形影响&#xff09;&#xff08;H为山地&#xff0c;P为平原&#xff09; 题解&#xff1a; 确定状态&#xff1a; 因为每个炮可…

CF891B-Gluttony【构造】

正题 题目链接:https://www.luogu.com.cn/problem/CF891B 题目大意 给出nnn个数字互不相同的一个序列aaa&#xff0c;求它的一个排列bbb&#xff0c;使得选出任意一个1∼n1\sim n1∼n的下标真子集&#xff0c;都有aaa的对应下标和不等于bbb的对应下标和。 1≤n≤22,0≤ai≤10…

DP专练2 (大理石 + [ZJOI 2010]数字计数)

你肯定以为DP专练会有很多题&#xff0c; 但是请考虑一下本仙女的DP码力&#xff0c;一次性能更几个题。。。 来吧&#xff0c;别害怕呀~~ 文章目录大理石题目题解代码实现数字计数题目题解代码实现大理石 题目 林老师是一位大理石收藏家&#xff0c;他在家里收藏了n块各种…

二阶常系数齐次线性递推数列

定义 若数列 \(\{a\}\) 满足 \(a_nc_1a_{n-1}c_2a_{n-2}\) &#xff0c;\(c_1,c_2\) 为常数&#xff0c;就称这种数列为二阶常系数齐次线性递推数列。 求解 加入能够将递推关系式改写为 \((a_n-ka_{n-1})p(a_{n-1}-ka_{n-1})\) 的形式&#xff0c;就可以求出 \(a_n-ka_{n-1}\) …

YBTOJ:斐波拉契(矩阵快速幂)

文章目录题目描述题目描述代码题目描述 题目描述 关键在于如何转化为本题的题目。。。 设 y(1-根号5&#xff09;/2$$ 再令&#xff1a; A(n)xn yn 通过尝试可以发现&#xff0c;A其实就是一个1,3为前两项的斐波拉契数列 则 xnA(n)-yn A的值可以用矩阵快速幂来求 而y是在(-1,…

ABP 框架 数据库底层迁移 Mysql 集群

技术交流&#xff0c;请加QQ群&#xff1a;538327407我的各种github 开源项目和代码&#xff1a;https://github.com/linbin524背景笔者 目前架构的IOT 项目是使用abp 框架作为后台,虽然abp的框架适用于中小型项目框架&#xff0c;但由于架构优美&#xff0c;笔者认为还是可以经…