ModSum(思维)

ModSum

Problem Statement

 

For an integer N, we will choose a permutation {P1,P2,…,PN} of {1,2,…,N}.

Then, for each i=1,2,…,N, let Mi be the remainder when i is divided by Pi.

Find the maximum possible value of M1+M2+[cdots]+MN.

Constraints

 

  • N is an integer satisfying 1≤N≤109.

Input

 

Input is given from Standard Input in the following format:

N

Output

Print the maximum possible value of M1+M2+[cdots]+MN.

Sample Input 1

 

2

Sample Output 1

 

1

When the permutation {P1,P2}={2,1} is chosen, M1+M2=1+0=1.

Sample Input 2

 

13

Sample Output 2

 

78

Sample Input 3

 

1

Sample Output 3

 

0

思路:这道题看样例就很容易可以猜出是求(1+2+...+n-1)。

这里的最优策略是

如样例13

除数        12   11    10    9    8    7    6    5    4    3    2    1    13

被除数    13    12    11   10   9    8    7    6    5    4    3    2    1

余数        12    11    10    9    8    7    6    5    4    3    2    1    0

因此最大值即为n-1的累加。

代码就超级简单。

#include<iostream>

using namespace std;

int main(){
	long long n;
	cin>>n;
	long long sum=0;
	for(long long i=1;i<n;i++){
		sum+=i;
	}
	cout<<sum<<endl;
	return 0;
}

 如果数据范围比较大,也有公式1+2+3+...+k=(k+1)*k/2。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值