解题思路
就从 k + 1 k+1 k+1开始暴力的假设后面的都是文本页,当再加一页文本页,数码和就超过 s s s的时候,开始贪心。
为了补上s和当前数码和的差值,试着让每一页都往后推一页,因为就算全部文本页都往后推了一页,也只多了一个插图页。
假设现在文本页为 x x x页,多了一个插图页的代价,可以让全部文本页都往后推了一页,让差值减小x。所以用差值除以 x x x的商,就是至少要多多少插图页,最后如果差值除以x有余数(设为 e e e),插图页还要加一,因为还要让e个文本页往后推,而 e < n e<n e<n,保证不会多出两个插图,只用加一。
代码
#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
ll k,s,w;
int main(){
scanf("%lld%lld",&k,&s);
ll j=k+1,ss=s;
while(ss-j>=0)
{
ss=ss-j;
j++;
}
j=j-1-k;
if((ss/j)*j==ss)
printf("%lld",ss/j+k);
else printf("%lld",ss/j+k+1);
}