题目练习(生死时速2.0版)

2024-02-18 03:59
文章标签 题目 练习 2.0 生死时速

本文主要是介绍题目练习(生死时速2.0版),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目一(Before an Exam)

题意翻译

题目背景

明天皮特将要考生物。他并不很喜欢生物,但在 d 天前他得知他将不得不参加此次考试。皮特严厉的父母勒令他立即复习,因此他在第 i 天将需要学习不少于 minTimei​ 小时,不多于 maxTimei​ 小时。他们同时警告皮特:考试前一天,他将被检查他复习的完成情况。

因此,今天皮特的父母会要求他展示他考前复习的学习时间表。然而,他只记录这 d 天以来他复习所用的总计用时sumTime(小时).现在他希望知道他能否给他的父母展示一份时间表,包含 d 个数,每个数 schedulei​ 表示皮特第 i 天在复习生物上的用时(单位为小时),并应满足上文提及的要求。

题目输入

第一行包含两个数:d,sumTime。

(1≤d≤30,0≤sumTime≤240),意义如上所述。

接下来 d 行,每行两个数:minTimei​,maxtimei​,两个数之间有一个空格,意义如上。(0≤minTimei​≤maxTimei​≤8)

题目输出

如果有解,在单独一行输出 YES,换行,输出任意一种满足上文要求的解。如果无解,在单独一行中输出 NO

输入输出样例

输入 #1复制

1 48
5 7

输出 #1复制

NO

输入 #2复制

2 5
0 1
3 5

输出 #2复制

YES
1 4 

代码实现:

#include<stdio.h>
struct fun
{int max;int min;int cha;
}time[40];
int main()
{int d, sumtime;scanf("%d%d", &d, &sumtime);int p1 = 0, p2 = 0;for (int i = 1; i <= d; i++) {scanf("%d%d", &time[i].min, &time[i].max);p1 += time[i].max;p2 += time[i].min;time[i].cha = time[i].max - time[i].min;}if (sumtime<p2 || sumtime>p1) {printf("NO\n"); return 0;}else printf("YES\n");int f = 0;int p3 = sumtime - p2;if (p3 != 0) {for (int i = 1; i <= d; i++) {for (int j = 1; j <= time[i].cha; j++) {time[i].min++;p3--;if (p3 == 0) {f = 1; break;}}if (f == 1)break;}}for (int i = 1; i <= d; i++) {printf("%d ", time[i].min);}return 0;
}

结果:

样例一

题目二(最大子段和)

题目描述

给出一个长度为 n 的序列 a,选出其中连续且非空的一段使得这段和最大。

输入格式

第一行是一个整数,表示序列的长度 n。

第二行有 n 个整数,第 i 个整数表示序列的第 i 个数字 ai​。

输出格式

输出一行一个整数表示答案。

输入输出样例

输入 #1复制

7
2 -4 3 -1 2 -4 3

输出 #1复制

4

说明/提示

样例 1 解释

选取 [3,5][3,5] 子段 {3,−1,2}{3,−1,2},其和为 4。

数据规模与约定
  • 对于 40%40% 的数据,保证 �≤2×103n≤2×103。
  • 对于 100%100% 的数据,保证 1≤�≤2×1051≤n≤2×105,−104≤��≤104−104≤ai​≤104。

代码实现:

#include<bits/stdc++.h>
using namespace std;
int maxx = -3333333;
int main()
{int n, a, b;scanf("%d", &n);for (int i = 1; i <= n; i++) {scanf("%d", &a);if (i == 1)b = a;else b = max(a, a + b);maxx = max(maxx, b);}printf("%d", maxx);return 0;
}

题目三(KMP)

题目描述

给出两个字符串 s1​ 和 s2​,若 s1​ 的区间 [l,r] 子串与 s2​ 完全相同,则称 s2​ 在 s1​ 中出现了,其出现位置为 l。
现在请你求出 s2​ 在 s1​ 中所有出现的位置。

定义一个字符串 s 的 border 为 s 的一个非 s 本身的子串 t,满足 t 既是 s 的前缀,又是 s 的后缀。
对于 s2​,你还需要求出对于其每个前缀 ′s′ 的最长 border ′t′ 的长度。

输入格式

第一行为一个字符串,即为 s1​。
第二行为一个字符串,即为 s2​。

输出格式

首先输出若干行,每行一个整数,按从小到大的顺序输出 s2​ 在 s1​ 中出现的位置。
最后一行输出 ∣s2​∣ 个整数,第 i 个整数表示 s2​ 的长度为 i 的前缀的最长 border 长度。

输入输出样例

输入 #1复制

ABABABC
ABA

输出 #1复制

1
3
0 0 1 

说明/提示

样例 1 解释

对于 s2​ 长度为 3 的前缀 ABA,字符串 A 既是其后缀也是其前缀,且是最长的,因此最长 border 长度为 11。

数据规模与约定

本题采用多测试点捆绑测试,共有 3 个子任务

  • Subtask 1(30 points):∣s1​∣≤15,∣s2​∣≤5。
  • Subtask 2(40 points):∣s1​∣≤104,∣s2​∣≤102。
  • Subtask 3(30 points):无特殊约定。

代码:

#include<cstdio>
#include<cstring>
#define MAX 1000100
using namespace std;
int KMP[1000100], len1, len2;
char a[MAX], b[MAX];
int main()
{scanf("%s%s", a+1, b+1);len1 = strlen(a+1);len2 = strlen(b+1);int j = 0;for (int i = 2; i <= len2; i++) {while (j && b[i] != b[j + 1])j = KMP[j];if (b[j + 1] == b[i])j++;KMP[i] = j;}j = 0;for (int i = 1; i <= len1; i++) {while (j > 0 && b[j + 1] != a[i])j = KMP[j];if (b[j + 1] == a[i])j++;if (j == len2) {printf("%d\n", i - len2 + 1);j = KMP[j];}}for (int i = 1; i <= len2; i++)printf("%d ", KMP[i]);return 0;
}

这篇关于题目练习(生死时速2.0版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/719986

相关文章

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1(高级消息队列协议)是一种网络协议,它允许遵从该协议的客户端(Publisher或者Consumer)应用程序与遵从该协议的消息中间件代理(Broker,如RabbitMQ)进行通信。 AMQP 0-9-1模型的核心概念包括消息发布者(producers/publisher)、消息(messages)、交换机(exchanges)、

题目1254:N皇后问题

题目1254:N皇后问题 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: N皇后问题,即在N*N的方格棋盘内放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在同一斜线上。因为皇后可以直走,横走和斜走如下图)。 你的任务是,对于给定的N,求出有多少种合法的放置方法。输出N皇后问题所有不同的摆放情况个数。 输入

题目1380:lucky number

题目1380:lucky number 时间限制:3 秒 内存限制:3 兆 特殊判题:否 提交:2839 解决:300 题目描述: 每个人有自己的lucky number,小A也一样。不过他的lucky number定义不一样。他认为一个序列中某些数出现的次数为n的话,都是他的lucky number。但是,现在这个序列很大,他无法快速找到所有lucky number。既然

【Rust练习】12.枚举

练习题来自:https://practice-zh.course.rs/compound-types/enum.html 1 // 修复错误enum Number {Zero,One,Two,}enum Number1 {Zero = 0,One,Two,}// C语言风格的枚举定义enum Number2 {Zero = 0.0,One = 1.0,Two = 2.0,}fn m

MySql 事务练习

事务(transaction) -- 事务 transaction-- 事务是一组操作的集合,是一个不可分割的工作单位,事务会将所有的操作作为一个整体一起向系统提交或撤销请求-- 事务的操作要么同时成功,要么同时失败-- MySql的事务默认是自动提交的,当执行一个DML语句,MySql会立即自动隐式提交事务-- 常见案例:银行转账-- 逻辑:A给B转账1000:1.查询

html css jquery选项卡 代码练习小项目

在学习 html 和 css jquery 结合使用的时候 做好是能尝试做一些简单的小功能,来提高自己的 逻辑能力,熟悉代码的编写语法 下面分享一段代码 使用html css jquery选项卡 代码练习 <div class="box"><dl class="tab"><dd class="active">手机</dd><dd>家电</dd><dd>服装</dd><dd>数码</dd><dd

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(

014.Python爬虫系列_解析练习

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈 优

码蹄集部分题目(2024OJ赛9.4-9.8;线段树+树状数组)

1🐋🐋配对最小值(王者;树状数组) 时间限制:1秒 占用内存:64M 🐟题目思路 MT3065 配对最小值_哔哩哔哩_bilibili 🐟代码 #include<bits/stdc++.h> using namespace std;const int N=1e5+7;int a[N],b[N],c[N],n,q;struct QUERY{int l,r,id;}que

如何快速练习键盘盲打

盲打是指在不看键盘的情况下进行打字,这样可以显著提高打字速度和效率。以下是一些练习盲打的方法: 熟悉键盘布局:首先,你需要熟悉键盘上的字母和符号的位置。可以通过键盘图或者键盘贴纸来帮助记忆。 使用在线打字练习工具:有许多在线的打字练习网站,如Typing.com、10FastFingers等,它们提供了不同难度的练习和测试。 练习基本键位:先从学习手指放在键盘上的“家位”开始,通常是左手的