1206: B.求和

题目描述 点击这里

对于正整数n,k,我们定义这样一个函数f,它满足如下规律

 

现在给出nk,你的任务就是要计算f(n,k)的值。

 

输入

首先是一个整数T,表示有T组数据
接下来每组数据是n和k(1<=n,k<=108)

输出

打印出f(n,k)的值,每个输出单独占一行

样例输入

3
1 1
2 1
3 1

样例输出

-1
1
-2
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 int main()
 6 {
 7     long long T;
 8     cin>>T;
 9     while(T--)
10     {
11         long long n,i,j,k,zu,dui,f,sum=0,s;
12         cin>>n>>k;
13         zu=n/k;
14         dui=zu/2;
15         sum=dui*k*k;
16         s=n-dui*2*k;
17         f=1+dui*2*k;
18         if(s<=k)
19         {
20             for(i=0;i<s;i++)
21             {
22                 sum-=f;
23                 f++;
24             }
25         }
26         else
27         {
28             for(i=0;i<k;i++)
29             {
30                 sum-=f;
31                 f++;
32             }
33             for(i=0;i<s-k;i++)
34             {
35                 sum+=f;
36                 f++;
37             }
38         }
39         cout<<sum<<endl;
40     }
41 }

 

posted @ 2015-05-29 15:36  御心飞行  阅读(278)  评论(0编辑  收藏  举报