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 - 3(3个文本页) = 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 (贪心)