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
AC × 4
AC × 38
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