每日一题 背单词

7-3 背单词

分数 15

全屏浏览题目

切换布局

作者 JMU_ACM

单位 集美大学

【问题描述】

小明正在为四级做准备,他计划至少背 n 个新单词。

为了完成这个目标,小明决定在每天结束前背一些新单词,具体来说:

  • 第 1 天结束前,小明会背 m 个新单词;
  • 第 i 天(i≥2)结束前,小明会根据第 i−1 天背的单词数计算第 i 天背多少个新单词
    假设小明在第 i−1 天背了 t 个新单词:
    • 如果 t 是奇数,小明将会在第 i 天结束前背 3×t+1 个新单词;
    • 如果 t 是偶数,小明将会在第 i 天结束前背 2t​ 个新单词。

现在小明想知道按照这个方式背单词,最早在第几天结束时累计背了至少 n 个新单词。

【输入格式】

输入一行,包含两个整数 n,m ,分别代表小明计划背的新单词总数和小明第一天背的新单词数量。

【输出格式】

输出一行,包含一个整数 d ,代表小明在第 d 天结束时累计背了至少 n 个新单词。

【样例输入】
100 100
【样例输出】
1

第一天背了 100 个新单词,最早在第一天结束时完成背至少 100 个新单词的计划。

【样例输入】
100 50
【样例输出】
3

第一天背了 50 个新单词,第二天背了 25 个新单词,第三天背了 76 个新单词,累计背了 151 个新单词,最早在第三天结束时完成了背至少 100 个新单词的计划。

【评测用例规模与约定】

对于 60% 分数的评测用例,1≤n≤106,1≤m≤1000 。
对于 100% 分数的评测用例,1≤n≤1012,1≤m≤1000 。

今天来写一道学校比赛的题目,一直只拿了9分卡的我死死的/(ㄒoㄒ)/~~,完全没想到还可以这样节省循环次数(当然是参考了我们学校大佬的题解)

题目思路:

这题主要运用到的是冰雹思想,这里说一下什么是冰雹思想:比如我们取一个20,然后根据题目的意思进行运算,会发现运算到最后不管怎么运算下去都是1 2 4一直循环下去,简单来说就是到最后每7个单词需要三天来完成(如果不使用这一种处理方法,只是用冰雹猜想本身给出的处理方式,只能拿到百分60的分数)

然后就是在第一天的时候可以设置在循环外面,直接计算第一天,循环内部直接从第二天开始,最后输出就可以了

#include<bits/stdc++.h>
using namespace std;
typedef int long long ll;
int main()
{
	ll n,m;
	cin>>n>>m;
	ll day = 1;
	n-=m;
    while(n>0){
        if(m%2==0) m/=2;
        else m = 3*m+1;
        day++;
        n-=m;
        if(m==1||m==2||m==4) {
            day+=(n/7)*3;
            n%=7;
        }
    }
	
	cout<<day;
}

 题目心得:第一次知道了冰雹猜想这个东西,也明白了他在题目当中要怎么去处理才能更好的完成

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值