程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> AOJ 740 求和,aoj740求和

AOJ 740 求和,aoj740求和

編輯:C++入門知識

AOJ 740 求和,aoj740求和


  鏈接:http://icpc.ahu.edu.cn/OJ/Problem.aspx?id=740   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
Source 安徽省2015年“京勝杯”大學生程序設計競賽
來源: http://icpc.ahu.edu.cn/OJ/Problem.aspx?id=740     簡單題解:       - 找規律,循環節大小為k*k,長度為2*k       - 用這種方法解決雖然能低調通過,但消耗的時間仍然接近1s,求更好的解決辦法~    
 1 #include<iostream>
 2 using namespace std;
 3 
 4 int main()
 5 {
 6     long long t;
 7     cin>>t;
 8     while(t--)
 9     {
10         long long n,k,l;
11         while(cin>>n>>k)
12         {
13             l=n/(2*k);
14             long long sum=l*k*k;
15             long long s=k;
16             for(long long i=l*2*k+1;i<=n;i++)
17             {
18                 if(s!=0)
19                 {
20                     sum-=i;
21                     s--;
22                 }
23                 else
24                     sum+=i;
25             } 
26             cout<<sum<<endl;
27         }    
28     }
29     return 0;
30 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved