[NOIP2007 普及组] 守望者的逃离(含代码)

[NOIP2007 普及组] 守望者的逃离

题目背景

NOIP2007 普及组 T3

题目描述

恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变。

守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上。

为了杀死守望者,尤迪安开始对这个荒岛施咒,这座岛很快就会沉下去。到那时,岛上的所有人都会遇难。

守望者的跑步速度为 17 m / s 17m/s 17m/s,以这样的速度是无法逃离荒岛的。庆幸的是守望者拥有闪烁法术,可在 1 s 1s 1s 内移动 60 m 60m 60m,不过每次使用闪烁法术都会消耗魔法值 10 10 10 点。守望者的魔法值恢复的速度为 4 4 4 点每秒,只有处在原地休息状态时才能恢复。

现在已知守望者的魔法初值 M M M,他所在的初始位置与岛的出口之间的距离 S S S,岛沉没的时间 T T T。你的任务是写一个程序帮助守望者计算如何在最短的时间内逃离荒岛,若不能逃出,则输出守望者在剩下的时间内能走的最远距离。

注意:守望者跑步、闪烁或休息活动均以秒为单位,且每次活动的持续时间为整数秒。距离的单位为米。

输入格式

输入数据共一行三个非负整数,分别表示 M M M S S S T T T

输出格式

输出数据共两行。

第一行一个字符串 Yes \texttt{Yes} Yes No \texttt{No} No,即守望者是否能逃离荒岛。

第二行包含一个整数。第一行为 Yes \texttt{Yes} Yes 时表示守望者逃离荒岛的最短时间;第一行为 No \texttt{No} No 时表示守望者能走的最远距离。

样例 #1

样例输入 #1

39 200 4

样例输出 #1

No
197

样例 #2

样例输入 #2

36 255 10

样例输出 #2

Yes
6

提示

对于 30 % 30\% 30% 的数据, 1 ≤ T ≤ 10 1 \le T \le 10 1T10 1 ≤ S ≤ 100 1 \le S \le 100 1S100

对于 50 % 50\% 50% 的数据, 1 ≤ T ≤ 1 0 3 1 \le T \le 10^3 1T103 1 ≤ S ≤ 1 0 4 1 \le S \le 10^4 1S104

对于 100 % 100\% 100% 的数据, 1 ≤ T ≤ 3 × 1 0 5 1 \le T \le 3\times 10^5 1T3×105 0 ≤ M ≤ 1 0 3 0 \le M \le 10^3 0M103 1 ≤ S ≤ 1 0 8 1 \le S \le 10^8 1S108

题目来源

洛谷

题解

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;

int main() {
    int m, s, t, now = 0;
    cin >> m >> s >> t;
    int s1 = 0, s2 = 0; // 存放跑步能走的距离和用闪烁能走的距离

    for (int i = 1; i <= t; i++) { // 一个个时间去推
        s1 += 17; // 跑步每秒走17米

        if (m >= 10) {
            s2 += 60; // 能够闪现则闪现,闪现每秒走60米
            m -= 10; // 闪现消耗10点魔法值
        } else {
            m += 4; // 没蓝这一秒就用来回蓝,每秒恢复4点魔法值
        }

        if (s2 > s1) s1 = s2; // 闪现的距离大于跑步的距离时,用闪现替换跑步的距离

        if (s1 >= s) { // 如果跑出去则输出当前时间
            cout << "Yes" << endl << i << endl;
            return 0;
        }
    }

    cout << "No" << endl << s1 << endl; // 时间用完还没跑出去,输出“No”和最终能走的最远距离s1
    return 0;
}

  • 19
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: NOIP(全国信息学奥林匹克联赛,National Olympiad in Informatics in Provinces)是中国的一项计算机编程竞赛,分为普及和提高。2007年的NOIP普及初赛试题是一道编程题。 此题要求编写一个程序,统计一个给定整数的位数,并输出结果。例如,给定数字156,程序应输出3,因为156有3位数字。 解决这个问题的一种方法是,将给定数字转换为字符串,并计算字符串的长度。具体做法如下: 1. 首先,从输入中接收一个整数。 2. 将整数转换为字符串,可以使用内置的str()函数,它可以将整数转换为字符串类型。 3. 使用内置的len()函数获取字符串的长度。 4. 输出字符串的长度,即该数字的位数。 以下是一个简单的示例代码: ``` num = int(input("请输入一个整数:")) # 接收一个整数 num_str = str(num) # 转换为字符串 count = len(num_str) # 获取字符串长度 print("该数字的位数为:" + str(count)) # 输出结果 ``` 这段代码首先接收一个整数,然后将它转换为字符串。接着,通过使用len()函数获取字符串的长度,并将结果输出。 总结来说,2007年NOIP普及初赛试题要求编写一个程序,统计给定整数的位数。我们可以将整数转换为字符串,然后使用len()函数获取字符串的长度,即得到该数字的位数。以上是一个简单示例代码,实现了该功能。 ### 回答2: NOI(全国青少年信息学奥林匹克竞赛)是中国举办的一项重要的计算机竞赛,包括高级普及两个级别。而NOIP 2007普及初赛试题是该比赛中一道典型的问题。以下是对这个试题的300字中文回答: NOIP 2007普及初赛试题要求我们计算一个数的阶乘结果中末尾0的个数。阶乘,即一个数的所有正整数的乘积。题目给出了一个整数N,要求计算N的阶乘结果末尾0的个数。 我们可以观察到,N的阶乘结果末尾零的个数,取决于N中因子5的个数。因为每枚一次因子5,就会多一个末尾零。通过这个规律,我们可以将问题转化为计算N中因子5的个数。 首先,我们从1到N遍历每个数,看其是否能被5整除,如果可以,则计数器加一,代表多了一个因子5。接着继续判断当前数是否能被5整除,重复上述操作,直到当前数不能被5整除为止。最终,计数器的值就代表了N的阶乘结果中末尾0的个数。 通过这种方法,我们可以在O(logN)的时间复杂度内求得结果。值得注意的是,如果N特别大,超出了整型数所能表示的范围,需要使用更大的数据类型来存储结果。 总而言之,NOIP 2007普及初赛试题通过计算一个数的阶乘结果中末尾0的个数,考察了我们对数学规律的理解和代码的实现能力。我们可以通过观察规律,将问题转化为计算因子5的个数,并在较低的时间复杂度内求解。这是一个典型的数学问题,需要我们在解决过程中运用数学思维和编程技巧。 ### 回答3: noip 2007 普及初赛试题是全国信息学奥林匹克竞赛的一份初级试题,旨在考查学生在计算机编程和算法方面的基本能力。 该试题包多个题目,其中一个例题是求最大公约数。该题要求给定两个正整数A和B,计算它们的最大公约数。最大公约数是指能够同时整除A和B的最大正整数。 解答这个问题的一种常见算法是欧几里德算法。该算法的基本思想是通过连续进行取模运算,将较大的数变成较小的数,直到整除为止。具体步骤如下: 1. 如果A能够整除B,则B就是最大公约数; 2. 否则,将B取模A,得到的余数记为R; 3. 将A赋值为原来的B,将B赋值为原来的R; 4. 重复步骤1和步骤2,直到B能够整除A为止。 通过使用欧几里德算法,可以快速地求出A和B的最大公约数。 除了求最大公约数之外,试题还包其他题目,如字符串处理、排序算法、简单的图论等。这些题目旨在考察学生的编程能力、算法设计和实现能力。 参加noip 2007 普及初赛试题的考生需要具备一定的编程基础知识和算法理解能力。通过解答这些问题,学生不仅可以提高自己的编程技能,还可以锻炼自己的逻辑思维和问题解决能力。 参加noip 2007 普及初赛试题的考生需要认真学习相关的编程知识和算法理论,多进行编程练习和模拟考试,提升自己的编程水平和应试能力,为将来参加更高级别的信息学竞赛做好准备。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java 猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值