Submission #1520998
Source Code Expand
#include<bits/stdc++.h> using namespace std; #define MOD 1000000007LL #define MODMOD MOD*MOD const int matrix_size = 4; struct matrix{ int mat[matrix_size][matrix_size]; //caution! matrix(){ memset(mat, 0, sizeof(mat)); } }; matrix operator *(const matrix &a, const matrix &b){ matrix r; long long int tmp; for (int i = 0; i < matrix_size; i++){ for (int j = 0; j < matrix_size; j++){ tmp = 0; for (int k = 0; k < matrix_size; k++){ tmp += (long long int)(a.mat[i][k]) * b.mat[k][j]; if (tmp >= MODMOD)tmp -= MODMOD; } if (tmp >= MOD)tmp %= MOD; r.mat[i][j] = tmp; } } return r; } matrix operator +(const matrix &a, const matrix &b){ matrix r; for (int i = 0; i < matrix_size; i++){ for (int j = 0; j < matrix_size; j++){ r.mat[i][j] += a.mat[i][j] + b.mat[i][j]; if (r.mat[i][j] >= MOD){ r.mat[i][j] -= MOD; } } } return r; } matrix ppow(matrix i, long long int j){ if (j == 0){ for (int i1 = 0; i1<matrix_size; i1++){ for (int j = 0; j<matrix_size; j++){ i.mat[i1][j] = (i1 == j); } } return i; } if (j == 1LL){ return i; } j--; matrix r = i; while (j){ if ((j & 1LL)){ r = r*i; } i = i*i; j >>= 1LL; } return r; } int n; int m; vector<int> x; matrix base; matrix base2; int main(){ cin >> n >> m; for (int i = 0; i < m; i++){ int a; scanf("%d", &a); x.push_back(a); } //zero //one //two //all base.mat[3][0] = 1; base.mat[1][3] = 1; base.mat[2][3] = 1; base.mat[0][1] = base.mat[0][2] = base.mat[0][3] = 1; base.mat[0][0] = base.mat[1][1] = base.mat[2][2] = base.mat[3][3] = 1; base2 = base; base2.mat[3][0] = base2.mat[3][1] = base2.mat[3][2] = 0; base.mat[0][0]++; base.mat[1][0] = base.mat[2][0] = 1; matrix base3; base3.mat[0][0] = base3.mat[1][1] = base3.mat[2][2] = base3.mat[3][3] = 1; int cur = n; for (int i = (int)(x.size()) - 1; i >= 0; i--){ base3 = base3*ppow(base, cur-x[i]-1); base3 = base3*base2; cur = x[i]; } base3 = base3*ppow(base, cur); long long int ans = base3.mat[0][3]; printf("%lld\n", ans); return 0; }
Submission Info
Submission Time | |
---|---|
Task | E - Placing Squares |
User | Kmcode |
Language | C++14 (GCC 5.4.1) |
Score | 1600 |
Code Size | 2170 Byte |
Status | AC |
Exec Time | 279 ms |
Memory | 892 KB |
Compile Error
./Main.cpp: In function ‘int main()’: ./Main.cpp:74:18: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result] scanf("%d", &a); ^
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 1600 / 1600 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt |
All | sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, subtask_1_01.txt, subtask_1_02.txt, subtask_1_03.txt, subtask_1_04.txt, subtask_1_05.txt, subtask_1_06.txt, subtask_1_07.txt, subtask_1_08.txt, subtask_1_09.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt, subtask_1_17.txt, subtask_1_18.txt, subtask_1_19.txt, subtask_1_20.txt, subtask_1_21.txt, subtask_1_22.txt, subtask_1_23.txt, subtask_1_24.txt, subtask_1_25.txt, subtask_1_26.txt, subtask_1_27.txt, subtask_1_28.txt, subtask_1_29.txt, subtask_1_30.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
sample_01.txt | AC | 1 ms | 256 KB |
sample_02.txt | AC | 1 ms | 256 KB |
sample_03.txt | AC | 1 ms | 256 KB |
sample_04.txt | AC | 1 ms | 256 KB |
subtask_1_01.txt | AC | 89 ms | 640 KB |
subtask_1_02.txt | AC | 23 ms | 256 KB |
subtask_1_03.txt | AC | 10 ms | 512 KB |
subtask_1_04.txt | AC | 23 ms | 640 KB |
subtask_1_05.txt | AC | 279 ms | 892 KB |
subtask_1_06.txt | AC | 279 ms | 892 KB |
subtask_1_07.txt | AC | 39 ms | 892 KB |
subtask_1_08.txt | AC | 38 ms | 892 KB |
subtask_1_09.txt | AC | 4 ms | 256 KB |
subtask_1_10.txt | AC | 3 ms | 256 KB |
subtask_1_11.txt | AC | 2 ms | 256 KB |
subtask_1_12.txt | AC | 1 ms | 256 KB |
subtask_1_13.txt | AC | 2 ms | 256 KB |
subtask_1_14.txt | AC | 3 ms | 256 KB |
subtask_1_15.txt | AC | 1 ms | 256 KB |
subtask_1_16.txt | AC | 1 ms | 256 KB |
subtask_1_17.txt | AC | 12 ms | 640 KB |
subtask_1_18.txt | AC | 27 ms | 892 KB |
subtask_1_19.txt | AC | 1 ms | 256 KB |
subtask_1_20.txt | AC | 33 ms | 892 KB |
subtask_1_21.txt | AC | 1 ms | 256 KB |
subtask_1_22.txt | AC | 1 ms | 256 KB |
subtask_1_23.txt | AC | 1 ms | 256 KB |
subtask_1_24.txt | AC | 1 ms | 256 KB |
subtask_1_25.txt | AC | 1 ms | 256 KB |
subtask_1_26.txt | AC | 1 ms | 256 KB |
subtask_1_27.txt | AC | 1 ms | 256 KB |
subtask_1_28.txt | AC | 1 ms | 256 KB |
subtask_1_29.txt | AC | 1 ms | 256 KB |
subtask_1_30.txt | AC | 1 ms | 256 KB |