jzoj7208数学「ROIR 2018 Day2」书页
Posted SSL_ZZL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jzoj7208数学「ROIR 2018 Day2」书页相关的知识,希望对你有一定的参考价值。
「ROIR 2018 Day2」书页
题面
Description
Input
Output
Sample Input
1
8
Sample Output
3
Data Constraint
Hint
解题思路
选出 num 个数加起来等于 s ,每个数互不相同且最小的数要大于 k ,使这 num 个数之间的差最小
既然差要最小,那么这几个数值大小一定要平均(1,2,3,4,5…肯定最平均)
那就先暴力,求出最平均时的和sum
2,3,4 =》 这是最平均能求到的
那么剩下的5呢??尽量平摊到每个数上
如果除不尽,有余呢??从最后一个数往前平摊(这样数字才是升序)
那么现在考虑求答案
- 在一开始暴力时,答案为k(因为最平均,之间无插图页)
- 每次可以平摊到每个数上时,答案为k+sum(每个数之间的差还是不会变,但第一个数变大,前面的插图页就会变多)
- 有余的情况,答案为k + sum + 1(最后平摊到的区间 [l, num] ,只有 l 和 l - 1 位上的数之间的差变大1)
Code
#include <iostream>
#include <cstdio>
#define ll long long
using namespace std;
int k, num;
ll s, sum, ans;
int main() {
scanf("%d %lld", &k, &s);
ans = k; //暴力块:初始答案为k
for(int i = k + 1; sum + i <= s; i++)
num++, sum += i;
ans += (s - sum) / num; //平摊块
if((s - sum) % num) ans++; //有余平摊块
printf("%lld", ans);
}
以上是关于jzoj7208数学「ROIR 2018 Day2」书页的主要内容,如果未能解决你的问题,请参考以下文章