【zznu-2173】
题目描述
春天自幼学习人间大道,斩断情缘,现已修成正果,势必要斩尽巨魔。
某朝末年,战乱四起,民不聊生,魔界与人间界的封印减弱,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 = 1, r = n; LL s = (1+n)*n/2; LL ans = 0, ans1 = 0; LL ss = s; for(LL i = 1; i <= n; i++) { ans1 += ss*i; ss -= i; } while(l <= r) { ans += (r-l+1)*s; s -= r; if(s <= 0) break; ans += r*s; r--; ans += (r-l+1)*s; s -= l; if(s <= 0) break; ans += l*s; l++; } printf("%lld %lld\n", ans1, ans); } return 0; }