題目描述 description
n 個小夥伴(編號從 0 到 n-1)圍坐一圈玩遊戲。按照順時針方向給 n 個位置編號,從0 到 n-1。最初,第 0 號小夥伴在第 0 號位置,第 1 號小夥伴在第 1 號位置,……,依此類推。
遊戲規則如下:每一輪第 0 號位置上的小夥伴順時針走到第 m 號位置,第 1 號位置小夥伴走到第 m+1 號位置,……,依此類推,第n - m號位置上的小夥伴走到第 0 號位置,第n-m+1 號位置上的小夥伴走到第 1 號位置,……,第 n-1 號位置上的小夥伴順時針走到第m-1 號位置。
現在,一共進行了 10^k 輪,請問 x 號小夥伴最後走到了第幾號位置。
輸入描述 input description
輸入共 1 行,包含 4 個整數 n、m、k、x,每兩個整數之間用乙個空格隔開。
輸出描述 output description
輸出共 1 行,包含 1 個整數,表示 10^k 輪後 x 號小夥伴所在的位置編號。
樣例輸入 sample input
10 3 4 5
樣例輸出 sample output
5資料範圍及提示 data size & hint
對於 30%的資料,0 < k < 7;
對於 80%的資料,0 < k < 10^7;
對於 100%的資料,1 < n < 1,000,000,0 < m < n,1 <= x <=n,0 < k < 10^9。
每一次讓0號位置的小盆友走到m號位置,其真正意思是在對應的圖上前進m步,因為題目要求從0開始,前進m步後直接%n即是當前所處位置
那麼跑10^k次應該就可以了吧
但是k又極其的大……所以應該是不行
所以仔細思考一下,對於有n個人的情況下,其中乙個人前進mn次後必會回到原來的位置,所以只需要把10^k與n取乙個模,讓x前進剩下的次數m即可
10^k怎麼搞呢
老老實實快速冪把= =
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int n,m,k,x;
int ksm(int a,int b)
a*=a%n;
a%=n;
b>>=1;
}return r%n;
}int main()
NOIP 2013 轉圈遊戲
題目描述 description n 個小夥伴 編號從 0 到 n 1 圍坐一圈玩遊戲。按照順時針方向給 n 個位置編號,從0 到 n 1。最初,第 0 號小夥伴在第 0 號位置,第 1 號小夥伴在第 1 號位置,依此類推。遊戲規則如下 每一輪第 0 號位置上的小夥伴順時針走到第 m 號位置,第 1...
NOIP2013 轉圈遊戲
1 轉圈遊戲 circle.cpp c pas 問題描述 n 個小夥伴 編號從 0 到 n 1 圍坐一圈玩遊戲。按照順時針方向給 n 個位置編號,從 0 到 n 1。最初,第 0 號小夥伴在第 0 號位置,第 1 號小夥伴在第 1 號位置,依此類 推。遊戲規則如下 每一輪第 0 號位置上的小夥伴順時...
NOIP 2013 轉圈遊戲
題目描述 n 個小夥伴 編號從 0 到 n 1 圍坐一圈玩遊戲。按照順時針方向給 n 個位置編號,從0 到 n 1。最初,第 0 號小夥伴在第 0 號位置,第 1 號小夥伴在第 1 號位置,依此類推。遊戲規則如下 每一輪第 0 號位置上的小夥伴順時針走到第 m 號位置,第 1 號位置小夥伴走到第 m...