题目描述
春天自幼学习人间大道,斩断情缘,现已修成正果,势必要斩尽巨魔。
某朝末年,战乱四起,民不聊生,魔界与人间界的封印减弱,n只巨魔趁机降临人间,祸乱百姓。
n只巨魔只知扰乱人间,会有天谴降临,所以排阵出了失传已久的一字长蛇阵。以天道使者春天为原点,分别在1,2,3...n公里处,春天日行一公里前进;
第 i 为位置巨魔日啖百姓 i 万 主角诛杀此魔需 i 天时间 主角从出发地赶往此地需 i 日
击杀 i 魔头时 i 魔头无法吞吃百姓。
由于春天看到巨魔太多乱了分寸,所以击杀顺序并不唯一,求出巨魔最少吞吃多少万百姓以及最多吞吃多少万百姓。
某朝末年,战乱四起,民不聊生,魔界与人间界的封印减弱,n只巨魔趁机降临人间,祸乱百姓。
n只巨魔只知扰乱人间,会有天谴降临,所以排阵出了失传已久的一字长蛇阵。以天道使者春天为原点,分别在1,2,3...n公里处,春天日行一公里前进;
第 i 为位置巨魔日啖百姓 i 万 主角诛杀此魔需 i 天时间 主角从出发地赶往此地需 i 日
击杀 i 魔头时 i 魔头无法吞吃百姓。
由于春天看到巨魔太多乱了分寸,所以击杀顺序并不唯一,求出巨魔最少吞吃多少万百姓以及最多吞吃多少万百姓。
输入
每行一个正整数n(0<n<1e4);
输出
两个正整数,分别表示巨魔最少吞吃以及最多吞吃多少百姓,用空格隔开。
样例输入
1
2
样例输出
1 1
7 9
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main()
{
LL n;
while(~scanf("%lld", &n))
{
LL l = , r = n;
LL s = (+n)*n/;
LL ans = , ans1 = ;
LL ss = s;
for(LL i = ; i <= n; i++)
{
ans1 += ss*i;
ss -= i;
}
while(l <= r)
{
ans += (r-l+)*s;
s -= r;
if(s <= ) break;
ans += r*s;
r--;
ans += (r-l+)*s;
s -= l;
if(s <= ) break;
ans += l*s;
l++;
}
printf("%lld %lld\n", ans1, ans);
}
return ;
}