问题 C: 上楼梯

时间限制: 1 Sec  内存限制: 128 MB
提交 状态

题目描述

明明上n 级台阶可用四种步幅, 当然每种步幅花费的体力也不一样, 对应关系如下

明明开始有m 个体力, 求他最少要跨多少步才能上完所有台阶?
1 1
2 3
3 6
4 10

输入

只有n和m两个正整数,中间用空格做间隔符。0<n<=m。
对于30%的数据,m<100
对于60%的数据,m<10000
对于80%的数据,m<1000000
对于100的数据,m<10^19

输出

一个整数,表示最少要跨多少步才能上完所有台阶?

样例输入 Copy

3 5

样例输出 Copy

2

思路:

看表易分析规律 1, 1 + 2, 1 + 2 + 3, 1 + 2 + 3 + 4

看数据范围发现10^19 考虑写一个时间复杂度为O(1)的答案

如果n = 5, m = 5 那么是1 1 1 1 1(每次走一步,总共耗5体力)

如果m成为6,那么就是1 1 1 2

不难发现数对{1, 1} -> {2} 需要多花1点体力

同理 {1, 2} -> {3} 需要多花2点体力 可以推出所有的压缩方式 压缩对象的数值越大 多花费的体力越多

也就是说所需的代价越高,在这个思想下,不难发现,最佳答案是优先将所有1化为2 直到不能化了 再将2化为3

由于需要O(1)的答案,所以直接写数和判断就行了~

    ll T1= n;
ll T2= (n - (n % 2)) * 3 / 2 + n % 2;
ll T3= (n - (n % 3)) * 2 + n % 3;
ll T4= (n - (n % 4)) * 5 / 2 + n % 4;

T2是尽力将所有走法的全部都变成2所需的体力,最后加上n % 2便是剩下的"1"

T3,T4同理,只不过状态中余的数依然是“1”,所以在代码中需要特判

例如n % 3 = 1 则最后会剩下个1 后面压缩的时候就需要优先压缩{1, 3} -> {4}

然后再压缩{3, 3, 3, 3} -> {4, 4, 4} (也就是lcm的两个因子之间的转移)

题解:

/*
************************************
***********emu^w^*********** */ #include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
const int P = 13131;
#define ll long long
const int mod = 1E6 + 7;
const int INF = 0x3f, sINF = 0x3f3f3f3f;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
typedef pair<long long, long long> PLL;
int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
//
const int N = 500010;
ll n, m; int main()
{
cin>>n>>m; ll T1= n;
ll temp = m;
ll T2= (n - (n % 2)) * 3 / 2 + n % 2;
ll T3= (n - (n % 3)) * 2 + n % 3;
ll T4= (n - (n % 4)) * 5 / 2 + n % 4;
// cout<<T1<<endl; cout<<T2<<endl; cout<<T3<<endl; cout<<T4<<endl; if(m >= T1 && m < T2) {
temp -= n;
cout<<n - temp<<endl;
}
else if(m >= T2 && m < T3)
{
temp -= T2;
ll ans = n / 2 + n % 2;
if(n % 2) if(temp >= 2) {
temp -= 2;
ans--;
}
if(temp >= 3) ans -= temp / 3;
cout<<ans<<endl;
}
else if(m >= T3 && m < T4) {
temp -= T3;
ll ans = n / 3 + n % 3;
if(n % 3 == 2) {
temp--;
ans--;
}
if(n % 3 == 1 && temp >= 3) {
temp -= 3;
ans--;
}
if(n % 3 == 2 && temp >= 5) {
temp -= 5;
ans--;
}
if(temp >= 6) ans -= temp / 6; cout<<ans<<endl;
}
else {
ll ans = n / 4 + n % 4;
temp -= T4;
if(n % 4 == 2 && temp >= 1) {
temp--;
ans--;
}
if(n % 4 == 3 && temp >= 1) {
temp--;
ans--;
}
if(n % 4 == 3 && temp >= 2)
{
temp -= 2;
ans--;
}
cout<<ans<<endl;
} }

时间复杂度: O(1);

类型: 条件判断

C 上楼梯 中国石油大学新生训练赛#11的更多相关文章

  1. I 安装饮水机 中国石油大学新生训练赛#10

    问题 I: 安装饮水机 时间限制: 1 Sec  内存限制: 128 MB提交 状态 题目描述 为倡导城市低碳生活,市文明办计划举办马拉松比赛,为确保比赛安全,沿途设置了一些观察点.每个观察点派一个观 ...

  2. Contest1592 - 2018-2019赛季多校联合新生训练赛第二场(部分题解)

    Contest1592 - 2018-2019赛季多校联合新生训练赛第二场 D 10248 修建高楼(模拟优化) H 10252 组装玩具(贪心+二分) D 传送门 题干 题目描述 C 市有一条东西走 ...

  3. Contest1585 - 2018-2019赛季多校联合新生训练赛第一场(部分题解)

    Contest1585 - 2018-2019赛季多校联合新生训练赛第一场 C 10187 查找特定的合数 D 10188 传话游戏 H 10192 扫雷游戏 C 传送门 题干: 题目描述 自然数中除 ...

  4. Contest1593 - 2018-2019赛季多校联合新生训练赛第三场(部分题解)

    H 10255 自然数无序拆分 H 传送门 题干: 题目描述 美羊羊给喜羊羊和沸羊羊出了一道难题,说谁能先做出来,我就奖励给他我自己做的一样礼物.沸羊羊这下可乐了,于是马上答应立刻做出来,喜羊羊见状, ...

  5. 10.0.0.55_12-16训练赛部分writeup

    0x1 - MISC MISC100 一张帅行的照片 目测是图片隐写,但是binwalk并没有出来,应该是对文件头进行了修改 010editor查看一下,发现在jpg文件尾之后还有大量的数据 而且在灰 ...

  6. 给未来的你——李开复2011级大学新生演讲

    2011年09月26日08:30 来源:<中国青年报> <中国青年报>的读者朋友们: 你们肩负着中华的未来,你们身上正涌动着创新的血脉! 无论你在哪所学校,哪个城市,你都是与众 ...

  7. 7.30 正睿暑期集训营 A班训练赛

    目录 2018.7.30 正睿暑期集训营 A班训练赛 T1 A.蔡老板分果子(Hash) T2 B.蔡老板送外卖(并查集 最小生成树) T3 C.蔡老板学数学(DP NTT) 考试代码 T2 T3 2 ...

  8. UPC个人训练赛第十五场(AtCoder Grand Contest 031)

    传送门: [1]:AtCoder [2]:UPC比赛场 [3]:UPC补题场 参考资料 [1]:https://www.cnblogs.com/QLU-ACM/p/11191644.html B.Re ...

  9. HDU6579 2019HDU多校训练赛第一场1002 (线性基)

    HDU6579 2019HDU多校训练赛第一场1002 (线性基) 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6579 题意: 两种操作 1.在序列末 ...

随机推荐

  1. 5、架构--Nginx、搭建超级玛丽游戏

    笔记 1.晨考 1.NFS共享文件步骤 - 服务端 [root@backup ~]# yum install nfs-utils rpcbind -y [root@backup ~]# mkdir / ...

  2. Solution -「CF 510E」Fox And Dinner

    \(\mathcal{Description}\)   Link.   给定正整数集合 \(\{a_n\}\),求一种把这些数放置在任意多个圆环上的方案,使得每个环的大小大于 \(2\) 且环上相邻两 ...

  3. 论文解读(AGCN)《 Attention-driven Graph Clustering Network》

    Paper Information Title:<Attention-driven Graph Clustering Network>Authors:Zhihao Peng, Hui Li ...

  4. tomcat的基本使用及项目部署

    tomcat介绍 我们在学习Javaweb的时候,最普遍使用的服务器j就是阿帕奇的tomcat,主要是用来处理jsp和servlet的请求以及响应 tomcat的启动和关闭 在我们安装完tomcat后 ...

  5. 我们一起来学Shell - shell的条件判断

    文章目录 Shell 条件测试语法 符号说明 Shell 测试表达式 文件测试表达式 字符串测试表达式 整数操作符 逻辑操作符 测试表达式的区别总结 Shell 条件判断之if语句 单分支 IF 条件 ...

  6. 【摸鱼神器】基于SSM风格的Java源代码生成器 单表生成 一对一、一对多、多对多连接查询生成

    一.序言 UCode Cms 是一款Maven版的Java源代码生成器,是快速构建项目的利器.代码生成器模块属于可拆卸模块,即按需引入.代码生成器生成SSM(Spring.SpringBoot.Myb ...

  7. Ubuntu20重装nvidia驱动

    终端:nvidia-smi 查看驱动信息 错误:NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver ...

  8. jsp页面获取请求参数问题记录

    同一个请求可以从请求路径中获取参数,使用param.参数名 window.location.href = "admin/page.html?pageNum="+pageNum+&q ...

  9. EXCEL应用之商机分析:企业商机分析模板免费用

    ​一.分析背景 商机是订单的来源,因此抓住每个销售机会,就可以更多地赢得交易.商机管理可以说是业务环节中最为关键的一步.每个企业都有自己的商机阶段划分,从销售人员接触客户.发现商机.跟进商机.推进销售 ...

  10. python的字符串切片技术

    听说过python的字符串切片技术吗?是不是听着超高级的?实际上,也不用想得太难,python的字符串切片技术就是将字符串的某些字符提取出来而已~ 字符串切片 字符串是一种序列类型,可以按序号访问其中 ...