![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5yMlNTYmhTNiRjZ0kjNkZmN2MWY3kDZwMWMwITYiRjZ48CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
解題思路
就從 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);
}