普及冲奖——贪心补题报告

T1.小可分身术

一.题目要求

小可学会了分身术,一开始有一只小可,接下来会进行k轮操作,每一轮中每一只小可都会变成p只小可。 要求k轮后小可的总数恰好为n。要求找到两个正整数p,k,使得p+k最大

输入描述

输入一个整数n。

输出描述

输出p+k的最大值。

输入样例

  1. 2

输出样例

  1. 3

数据描述

2≤𝑛≤1e18

二.解题思路

  1. ​问题转化​​:

    满足 p^k = n的条件下最大化 p + k。数学分析表明:

    • 当 p增大时,k会减小(因 n固定),但 p的增长对 p + k的贡献远大于 k的减少。

    • ​最优解​​出现在 p取最大值时,即 p = n,此时 k = 1(因 n^1 = n),此时 p + k = n + 1

三.代码
 

#include<iostream>
using namespace std;
int main(){
	long long n;
	cin>>n;
	cout<<n+1;
	return 0;
}

注意:这里的n的数据范围是10的18次方,所以要把n定义成long long类型

T2.小可吃点心

一.题目要求

小可爱吃甜点,现在桌子上摆着一排n个点心,每个点心具有一个甜度𝑎𝑖a​i​​,小可一次能吃连续的一些点心,但是他一次不能吃总甜度和超过m(可以等于m),否则他就长不高啦!小可想要知道他最少吃几次才能把这些点心都吃完。

输入描述

第一行输入两个整数n,m,代表点心数量和一次可以吃的总甜度上限。
第二行输入n个整数,第i个整数代表第i个点心的甜度𝑎𝑖a​i​​。

输出描述

输出一行,一个整数,代表小可吃的最少次数。

输入样例

  1. 5 6
  2. 4 2 4 5 1

输出样例

  1. 3

数据描述

0≤𝑛,𝑎𝑖≤100

𝑚𝑎𝑥(𝑎𝑖)≤𝑚

二.解题思路

  1. ​贪心策略​​:遍历数组,尽可能延长当前子段,直到加入下一个元素会导致甜度和超过 m。

  2. ​终止条件​​:当累计甜度即将超过 m时,结束当前子段,计数器加 1,并重置累计甜度为当前元素值(因为当前元素需归属到下一段)。

  3. ​边界处理​​:单个元素甜度若超过 m需单独分段(但题目保证 max(ai​)≤m,故无需额外处理)

三.代码

#include<iostream>
using namespace std;
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	int n,m,a[105];
	int cnt=1,sum=0;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		int x;
		cin>>x;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值