2021.7.22提高B组模拟9T3 书页(贪心)

Posted SSL_LKJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021.7.22提高B组模拟9T3 书页(贪心)相关的知识,希望对你有一定的参考价值。

书页

题目大意

在这里插入图片描述

输入样例

在这里插入图片描述

1
8

输出样例

在这里插入图片描述

3

题目数据

在这里插入图片描述

解题思路

a 数组来存储已经存进去的数

o为它的个数

枚举 i

一直放数进去

s的值也要跟着减

直到 s < i

改变数组中的数

直到 s=0

输出最后一个数 - 文本页的数量就行了

下面用一组样例分析一下

输入样例

4 
25

输出样例

7

推答案

首先枚举

一直到

a[]={5,6,7}

s=7

将s转化为 s=2*3+1

则可以将 a 数组都 +2

s也要减相应的值

a[]={7,8,9}

s=1

继续,因为 7 8 都不能加了(加了就有重复的了)

则 a[]={7,8,10}

s=0

答案就是 10 - 33个文本页) = 7

AC代码

#include<cstring>
#include<cstdio>
using namespace std;
long long s,a[10000005];
int k,o;
int main()
{
	scanf("%d%lld",&k,&s);
	for(long long i=k+1;s;i++)//枚举
	{
		if(s>=i)a[++o]=1ll*i,s-=1ll*i;//存数
		else 
//下面可能跟所述思路有些不同
//原因是:当 s < i 后,a 数组的个数则不再增加
//所以前面的数对后面的数在程序上没有什么影响
//则可以求出最后一个数,就可以得出答案
		{
			if(s>=o)
			{
				long long x=1ll*s/o*1ll;//转化
				s-=1ll*o*x;
				a[o]+=1ll*x;//更改
			}
			else
			{
				s=0;
				a[o]+=1ll*1;//更改
			} 
		}
	}
	printf("%lld",1ll*a[o]-1ll*o);//答案
	return 0;
}

谢谢

以上是关于2021.7.22提高B组模拟9T3 书页(贪心)的主要内容,如果未能解决你的问题,请参考以下文章

2021.8.19提高B组模拟9T3 + P7410 [USACO21FEB] Just Green Enough (贪心)

2021.7.22提高B组模拟9T4 字符串匹配 (kmp)

2021.7.17提高B组模拟6T1 有趣的家庭菜园 4 (贪心)

2021.8.10提高B组模拟2T3 比赛(二分)(贪心—前缀和)

2021.8.9提高B组模拟1T3 平均数(二分)(贪心)

2021.7.19提高B组模拟7T3 只不过是长的领带(贪心)