不忘初心,砥礪前行!慶祝中華人民共和國建國六十九週年!祝祖國繁榮昌盛,祝全國人民幸福安康!
Problem 2096. -- 數字遊戲
2096: 數字遊戲
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 200 Solved: 57
[Submit][Status][Web Board]
Description
棟棟正在和同學們玩一個數字遊戲。
遊戲的規則是這樣的:棟棟和同學們一共n個人圍坐在一圈。棟棟首先說出數字1。接下來,坐在棟棟左手邊的同學要說下一個數字2。再下面的一個同學要從上一個同學說的數字往下數兩個數說出來,也就是說4。下一個同學要往下數三個數,說7。依次類推。
爲了使數字不至於太大,棟棟和同學們約定,當在心中數到 k-1 時,下一個數字從0開始數。例如,當k=13時,棟棟和同學們報出的前幾個數依次爲:
1, 2, 4, 7, 11, 3, 9, 3, 11, 7。
遊戲進行了一會兒,棟棟想知道,到目前爲止,他所有說出的數字的總和是多少。
Input
輸入的第一行包含三個整數 n,k,T,其中 n 和 k 的意義如上面所述,T 表示到目前爲止棟棟一共說出的數字個數。
Output
輸出一行,包含一個整數,表示棟棟說出所有數的和。
Sample Input
3 13 3
Sample Output
17
HINT
1 < n,k,T < 1,000,000;
Source
【解題思路】
以Sample爲例,設a爲每輪剛開始加的數,第一輪加的數爲1 2 3所以a1=1,第二輪加的數爲4 5 6所以a2=4,以此類推不難發現a=a+n。設x爲棟棟要報的數,所以棟棟每次要加長度爲n公差爲1的一個等差數列,因爲首相爲ai,所以棟棟每次要加的數列的最後一個數爲ai+1=ai+(n-1),所以棟棟每次要加的數爲這個等差數列求和,即(ai+ai+n-1)*n/2,所以棟棟報的數爲(x+(ai+ai+n-1)*n/2)%k。最後類推一下即可。
【代碼】
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int main()
{
LL n,k,t,j=0,ans=1,x=1,a=1;
scanf("%lld%lld%lld",&n,&k,&t);
for(int i=0;i<t-1;i++)
{
x=((a+a+n-1)*n/2+x)%k;
//printf("x=%lld\n",x);
ans+=x;
a+=n;
}
printf("%lld\n",ans);
return 0;
}