Submission #71055352


Source Code Expand

Copy
#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#define MOD_BY 1000000007
int add(int a, int b) {
return a + b - MOD_BY * (a + b >= MOD_BY);
}
int mul(int a, int b) {
return (int)((long long)a * b % MOD_BY);
}
int N;
uint64_t K;
int a[64][64];
void matmul(int x[64][64], int y[64][64], int out[64][64]) {
int i, j, k;
int ans[64][64];
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#include <stdio.h>
#include <string.h>
#include <inttypes.h>

#define MOD_BY 1000000007

int add(int a, int b) {
	return a + b - MOD_BY * (a + b >= MOD_BY);
}

int mul(int a, int b) {
	return (int)((long long)a * b % MOD_BY);
}

int N;
uint64_t K;
int a[64][64];

void matmul(int x[64][64], int y[64][64], int out[64][64]) {
	int i, j, k;
	int ans[64][64];
	memset(ans, 0, sizeof(ans));
	for (k = 0; k < N; k++) {
		for (i = 0; i < N; i++) {
			for (j = 0; j < N; j++) {
				ans[i][j] = add(ans[i][j], mul(x[i][k], y[k][j]));
			}
		}
	}
	memcpy(out, ans, sizeof(ans));
}

int cur[64][64];

int main(void) {
	int i, j;
	int ans = 0;
	if (scanf("%d%" SCNu64, &N, &K) != 2) return 1;
	for (i = 0; i < N; i++) {
		for (j = 0; j < N; j++) {
			if (scanf("%d", &a[i][j]) != 1) return 1;
		}
		cur[i][i] = 1;
	}
	while (K > 0) {
		if (K & 1) matmul(cur, a, cur);
		matmul(a, a, a);
		K >>= 1;
	}
	for (i = 0; i < N; i++) {
		for (j = 0; j < N; j++) {
			ans = add(ans, cur[i][j]);
		}
	}
	printf("%d\n", ans);
	return 0;
}

Submission Info

Submission Time
Task R - Walk
User mikecat
Language C (gcc 12.2.0)
Score 100
Code Size 1074 Byte
Status AC
Exec Time 25 ms
Memory 1784 KiB

Judge Result

Set Name All
Score / Max Score 100 / 100
Status
AC × 23
Set Name Test Cases
All 0_00, 0_01, 0_02, 0_03, 0_04, 1_00, 1_01, 1_02, 1_03, 1_04, 1_05, 1_06, 1_07, 1_08, 1_09, 1_10, 1_11, 1_12, 1_13, 1_14, 1_15, 1_16, 1_17
Case Name Status Exec Time Memory
0_00 AC 1 ms 1636 KiB
0_01 AC 1 ms 1768 KiB
0_02 AC 0 ms 1636 KiB
0_03 AC 0 ms 1640 KiB
0_04 AC 1 ms 1780 KiB
1_00 AC 0 ms 1692 KiB
1_01 AC 0 ms 1656 KiB
1_02 AC 1 ms 1776 KiB
1_03 AC 18 ms 1660 KiB
1_04 AC 1 ms 1764 KiB
1_05 AC 18 ms 1664 KiB
1_06 AC 1 ms 1624 KiB
1_07 AC 25 ms 1624 KiB
1_08 AC 13 ms 1772 KiB
1_09 AC 17 ms 1772 KiB
1_10 AC 18 ms 1776 KiB
1_11 AC 16 ms 1740 KiB
1_12 AC 17 ms 1784 KiB
1_13 AC 20 ms 1760 KiB
1_14 AC 18 ms 1640 KiB
1_15 AC 19 ms 1772 KiB
1_16 AC 19 ms 1636 KiB
1_17 AC 19 ms 1664 KiB


2025-11-19 (Wed)
03:05:46 +09:00