歷屆試題 數字遊戲
時間限制:1.0s 記憶體限制:256.0mb
問題描述
棟棟正在和同學們玩乙個數字遊戲。
遊戲的規則是這樣的:棟棟和同學們一共n個人圍坐在一圈。棟棟首先說出數字1。接下來,坐在棟棟左手邊的同學要說下乙個數字2。再下面的乙個同學要從上乙個同學說的數字往下數兩個數說出來,也就是說4。下乙個同學要往下數三個數,說7。依次類推。
為了使數字不至於太大,棟棟和同學們約定,當在心中數到 k-1 時,下乙個數字從0開始數。例如,當k=13時,棟棟和同學們報出的前幾個數依次為:
1, 2, 4, 7, 11, 3, 9, 3, 11, 7。
遊戲進行了一會兒,棟棟想知道,到目前為止,他所有說出的數字的總和是多少。
輸入格式
輸入的第一行包含三個整數 n,k,t,其中 n 和 k 的意義如上面所述,t 表示到目前為止棟棟一共說出的數字個數。
輸出格式
輸出一行,包含乙個整數,表示棟棟說出所有數的和。
樣例輸入
3 13 3
樣例輸出
17樣例說明
棟棟說出的數依次為1, 7, 9,和為17。
資料規模和約定
1 < n,k,t < 1,000,000;
我這題沒有直接做,而是用公式推導了一下,直接做,值那麼大應該會超時吧。本題需推導過程如下:
第n個數的值為:1+1+2+3+4......+n-1==(n*(n-1)/2+1)%13;
(a+b)%n==((a%n)+(b%n))%n;
(a-b)%n==((a%n)-(b%n)+n)%n;
a*b%n==(a%n)(b%n)%n;
公式帶入展開就好了;
然後將每乙個算出來的值加起來就好了;
ac**:
# include int main()
else
ans=ans+(((m1%k)*(m2%k))%k+1)%k;
} printf("%lld", ans);
return 0;
}
藍橋杯 數字遊戲
問題描述如下 問題不難,最大的問題是溢位,如果使用long long而直接暴力求借,溢位問題依舊存在。如何解決呢,不難得出第i個人心中的數是1 1 2 3 i 1 所以到下一次棟棟心裡的數為1 1 2 3 4 5 n 其中n為已經有n人次報過數 為了避免溢位,筆者的做法是保留上次棟棟報數的值,假設為...
藍橋杯 數字遊戲
題目描述 解題過程 最初以為是乙個迴圈節問題,樣例確實是迴圈的,多寫幾組就發現了。但是,其實是乙個坑,根本不是什麼迴圈節。於是我直接暴力做了一遍,過了一半資料 include using namespace std const int maxn 1e6 7 typedef long long ll ...
藍橋杯 數字遊戲
問題 給定乙個1 n的排列a i 每次將相鄰兩個數相加,得到新序列,再對新序列重複這樣的操作,顯然每次得到的序列都比上一次的序列長度少1,最終只剩乙個數字。例如 3 1 2 4 4 3 6 7 9現在如果知道n和最後得到的數字sum,請求出最初序列a i 為1 n的乙個排列。若有多種答案,則輸出字典...