andy6804tw
8/6/2016 - 5:30 PM

http://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?id=30527 這題用模擬會溢位,所以要用數學方法解,環狀位置要用餘數運算 我們可以遵循它的規律 D會員人數 K會員代號 N換位次數 L每次移動距離 ex:

http://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?id=30527

這題用模擬會溢位,所以要用數學方法解,環狀位置要用餘數運算 我們可以遵循它的規律 D會員人數 K會員代號 N換位次數 L每次移動距離 ex: 會員代號偶數時 8 3 2 1 原本位置 4 3 2 第一次換位結果 6 3 4 第二次換位結果 8 3 6 推導出 ((k+1)-(2NL))%D =>8//因為偶數逆時鐘所以減若為負數加上D

會員代號奇數時 8 4 2 1 原本位置 5 4 3 第一次換位結果 3 4 1 第二次換位結果 1 4 7 ((k+1)+(2NL))%D =>1//奇數順時鐘所以加

最後當數字為0時要變成D

import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner scn = new Scanner(System.in);
		int n = scn.nextInt();
		while (n-- != 0) {
			long D = scn.nextLong(), K = scn.nextLong(), N = scn.nextLong(), L = scn.nextLong(), a = 0, b = 0;
			if (K % 2 == 1) {//會員為奇數時
				a = ((K + 1) + (2 * L * N)) % D;
				b = ((K - 1) + (2 * L * N)) % D;

			} 
			else {//會員為偶數時
				a = ((K + 1) - (2 * L * N)) % D;
				b = ((K - 1) - (2 * L * N)) % D;
				if (a < 0)
					a += D;
				if (b < 0)
					b += D;
			}
			if (a == 0)
				a = D;
			if (b == 0)
				b = D;
			System.out.println(a + " " + b);
		}
	}
	/* 
    題目:[Problem B11] Rotate around a circle
    作者:1010
    時間:西元 2016 年 8 月 */
}