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

题意

给定 M ( 0 ≤ M ≤ 1 0 3 ) , S ( 1 ≤ S ≤ 1 0 8 ) , T ( 1 ≤ T ≤ 3 × 1 0 5 ) M(0 \leq M \leq 10^3),S(1 \leq S \leq 10^8),T(1 \leq T \leq 3\times 10^5) M(0≤M≤103),S(1≤S≤108),T(1≤T≤3×105),守望者开始在位置 0 0 0,对于每一秒(以下每一种操作的持续时间都是一整秒),有以下三种操作,可以选择其中一种:

  • 当前位置增加 17 17 17,不改变 M M M。
  • 当 M ≥ 10 M \geq 10 M≥10 时,可将当前位置增加 60 60 60,并将 M M M 扣除 10 10 10。
  • 不移动位置,并将 M ← M + 4 M \gets M + 4 M←M+4。

求守望者能否在 T T T 秒内走 S S S 个位置,如果可以,输出 Yes 和最短在第几秒后可以走超过 S S S 个位置;否则输出 No,并输出在第 T T T 秒最远可以走到哪里。

思路

考虑当 M = 0 M = 0 M=0 时,如果剩余路程还很长,则可注意到对于每一次普通的走路在 7 s 7s 7s 内可以走 119 m 119m 119m,用特殊操作(进行五次操作 3 3 3 和两次操作 2 2 2 可以将路程增加 120 m 120m 120m ),因此特殊操作的速度显然快于普通操作。

首先令 d p i dp_i dpi 表示在第 i i i 秒内最远可以走到哪:

  • 当 M ≥ 10 M \geq 10 M≥10 时, d p i ← d p i − 1 + 60 , M ← M − 10 dp_i \gets dp_{i - 1} + 60,M \gets M - 10 dpi←dpi−1+60,M←M−10 。
  • 否则, d p i ← d p i − 1 M ← M + 4 dp_i \gets dp_{i - 1}M \gets M + 4 dpi←dpi−1M←M+4。

此时求出的还不是第 i i i 秒的最佳情况,毕竟你进行操作 2 2 2 增加魔法值的同时通过进行操作 1 1 1 肯定在第 i i i 秒时更优,因此再次循环:

  • 如果 d p i < d p i − 1 + 17 , d p i ← d p i − 1 + 17 dp_i < dp_{i - 1} + 17,dp_i \gets dp_{i - 1} + 17 dpi<dpi−1+17,dpi←dpi−1+17

从而达到真正能求出 d p i dp_i dpi 而不影响进行操作 2 , 3 2,3 2,3 的效果。

最后进行相应判断即可。

代码

cpp 复制代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
int m,s,t,dp[300005];
signed main() {
	scanf("%lld %lld %lld",&m,&s,&t);
	for(int i = 1;i <= t;i++) {
		if(m >= 10) m -= 10,dp[i] = dp[i - 1] + 60;
		else m += 4,dp[i] = dp[i - 1];
	}
	for(int i = 1;i <= t;i++) {
		if(dp[i] < dp[i - 1] + 17) dp[i] = dp[i - 1] + 17;
		if(dp[i] >= s) {
			printf("Yes\n%lld",i);
			return 0;
		}
	}
	printf("No\n%lld",dp[t]);
    return 0;
}
相关推荐
Hylan_J1 小时前
【VSCode】MicroPython环境配置
ide·vscode·python·编辑器
莫忘初心丶2 小时前
在 Ubuntu 22 上使用 Gunicorn 启动 Flask 应用程序
python·ubuntu·flask·gunicorn
计算机小白一个2 小时前
蓝桥杯 Java B 组之设计 LRU 缓存
java·算法·蓝桥杯
万事可爱^3 小时前
HDBSCAN:密度自适应的层次聚类算法解析与实践
算法·机器学习·数据挖掘·聚类·hdbscan
黑不溜秋的3 小时前
C++ 设计模式 - 策略模式
c++·设计模式·策略模式
欧了1114 小时前
洛谷P9240 [蓝桥杯 2023 省 B] 冶炼金属
职场和发展·蓝桥杯·洛谷·蓝桥杯大学b组c语言
失败尽常态5234 小时前
用Python实现Excel数据同步到飞书文档
python·excel·飞书
2501_904447744 小时前
OPPO发布新型折叠屏手机 起售价8999
python·智能手机·django·virtualenv·pygame
青龙小码农4 小时前
yum报错:bash: /usr/bin/yum: /usr/bin/python: 坏的解释器:没有那个文件或目录
开发语言·python·bash·liunx
大数据追光猿5 小时前
Python应用算法之贪心算法理解和实践
大数据·开发语言·人工智能·python·深度学习·算法·贪心算法