2011-06-14 20:53:49Morris
b238. A. 腹黑、傲嬌
http://zerojudge.tw/ShowProblem?problemid=b238
內容 :
輸入說明
:
輸出說明
:
如果腹黑,就輸出Haraguroi;若傲嬌,輸出Tsundere,否則輸出Normal。
範例輸入 :
4 1 2 3 4 0 9 1 2 3 4 1 9 4 3 2 1 1 1 4 3 2 1 1 10000
範例輸出 :
Normal Haraguroi Normal Tsundere
提示
:
出處
:
2009 NPSC 高中組初賽
作法 : 矩陣乘法 & D&C
當初不會矩陣,簡直被壓著打,過了那麼久才來討回 ...
作法 : 矩陣乘法 & D&C
當初不會矩陣,簡直被壓著打,過了那麼久才來討回 ...
/**********************************************************************************/
/* Problem: b238 "A. 腹黑、傲嬌" from 2009 NPSC 高中組初賽 */
/* Language: C */
/* Result: AC (4ms, 238KB) on ZeroJudge */
/* Author: morris1028 at 2011-06-12 08:18:47 */
/**********************************************************************************/
#include<stdio.h>
typedef struct {
long long t[2][2];
}Matrix;
Matrix A, In, init;
Matrix mult(Matrix x, Matrix y, int M) {
Matrix t = init;
int i, j, k;
for(i = 0; i < 2; i++)
for(j = 0; j < 2; j++)
for(k = 0; k < 2; k++) {
t.t[i][k] = (t.t[i][k] + (x.t[i][j]*y.t[j][k])%M)%M;
}
for(i = 0; i < 2; i++)
for(j = 0; j < 2; j++)
t.t[i][j] = (t.t[i][j]+M)%M;
return t;
}
void ans(int t, int M) {
Matrix y = A;
long long H = 1, T = 1, tH, tT;
while(t) {
if(t&1) {
tH = H, tT = T;
T = ((y.t[0][0]*tT)%M + (y.t[0][1]*tH)%M)%M;
H = ((y.t[1][0]*tT)%M + (y.t[1][1]*tH)%M)%M;
H = (H+M)%M, T = (T+M)%M;
}
y = mult(y, y, M);
t /= 2;
}
if(H == T)
puts("Normal");
else if(H < T)
puts("Tsundere");
else
puts("Haraguroi");
}
main() {
int T, a, b, t, M;
for(a = 0; a < 2; a++)
for(b = 0; b < 2; b++)
A.t[a][b] = 0, In.t[a][b] = 0,
init.t[a][b] = 0;
for(a = 0; a < 2; a++) In.t[a][a] = 1;
scanf("%d", &T);
while(T--) {
scanf("%lld %lld %lld %lld", &A.t[0][0], &A.t[0][1], &A.t[1][0], &A.t[1][1]);
scanf("%d %d", &t, &M);
ans(t, M);
}
return 0;
}
上一篇:d961. A. 耶誕老人到你家
下一篇:d929. A. 迴文