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 }