B 找规律

Description

对于正整数n,k,我们定义这样一个函数f,它满足如下规律
f(n,k=1)=-1+2-3+4-5+6...n
f(n,k=2)=-1-2+3+4-5-6...n
f(n,k=3)=-1-2-3+4+5+6...n
f(n,k=4)=-1-2-3-4+5+6+7+8...n
现在给出n和k,你的任务就是要计算f(n,k)的值。


Input

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

Output

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

Sample Input

3
1 1
2 1
3 1

Sample Output

-1
1
-2

循环节的大小为k*k 长度为2*k

 1 # include <cstdio>
 2 # include <cstring>
 3 # include <iostream>
 4 # define LL long long
 5 using namespace std ;
 6 
 7 int main ()
 8 {
 9    // freopen("in.txt","r",stdin) ;
10     int T ;
11     cin>>T ;
12     while (T--)
13     {
14         LL n , k;
15         cin>>n>>k ;
16         LL i ;
17         LL t1 = n/(2*k) ;
18         LL sum = t1 * k * k ;
19         LL l = k ;
20         for (i = 2*k*t1+1 ; i <= n ; i++)
21         {
22             if (l != 0)
23             {
24                 sum -= i ;
25                 l-- ;
26             }
27             else
28             {
29                 sum += i ;
30             }
31         }
32 
33         cout<<sum<<endl ;
34     }
35 
36 
37 
38     return 0 ;
39 }
View Code
原文地址:https://www.cnblogs.com/mengchunchen/p/4528264.html