Submission #434072


Source Code Expand

#include <cstdio>
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <string>
#include <cstring>
#include <sstream>
#include <algorithm>
#include <functional>
#include <queue>
#include <stack>
#include <cmath>
#include <iomanip>
#include <list>
#include <tuple>
#include <bitset>
#include <ciso646>

using namespace std;

inline bool cheak(int x, int y, int xMax, int yMax){ return x >= 0 && y >= 0 && xMax > x && yMax > y; }
inline int toInt(string s) { int v; istringstream sin(s); sin >> v; return v; }
template<class T> inline string toString(T x) { ostringstream sout; sout << x; return sout.str(); }
template<class T> inline T sqr(T x) { return x*x; }

typedef pair<int, int> P;
typedef tuple<int, int, int> T;
typedef long long ll;
typedef unsigned long long ull;

#define For(i,a,b)	for(int (i) = (a);i < (b);(i)++)
#define rep(i,n)	For(i,0,n)
#define clr(a)		memset((a), 0 ,sizeof(a))
#define mclr(a)		memset((a), -1 ,sizeof(a))
#define all(a)		(a).begin(),(a).end()
#define sz(a)		(sizeof(a))
#define Fill(a,v)	fill((int*)a,(int*)(a+(sz(a)/sz(*(a)))),v)

const int dx[8] = { 1, 0, -1, 0, 1, 1, -1, -1 }, dy[8] = { 0, -1, 0, 1, -1, 1, -1, 1 };
const int mod = 1000000007;
const int INF = 1e9;

int d[5][5];
int m[26];

int dfs(int y,int x){
	
	int ret = 0;
	For(i, 1, 26){
		if (!m[i]){

			if (y > 0 && y < 4){
				if (d[y - 1][x] != 0 && d[y + 1][x] != 0)
				if (d[y - 1][x] < i && i < d[y + 1][x])continue;
				if (d[y - 1][x] > i && i > d[y + 1][x])continue;
			}
			if (x > 0 && x < 4){
				if (d[y][x - 1] != 0 && d[y][x + 1] != 0)
				if (d[y][x - 1] < i && i < d[y][x + 1])continue;
				if (d[y][x - 1] > i && i > d[y][x + 1])continue;
			}
			if (y > 1 && y < 5){
				if (d[y - 2][x] != 0 && d[y - 1][x] != 0)
				if (d[y - 2][x] < d[y - 1][x] && d[y - 1][x] < i)continue;
				if (d[y - 2][x] > d[y - 1][x] && d[y - 1][x] > i)continue;
			}
			if (x > 1 && x < 5){
				if (d[y][x - 2] != 0 && d[y][x - 1] != 0)
				if (d[y][x - 2] < d[y][x - 1] && d[y][x - 1] < i)continue;
				if (d[y][x - 2] > d[y][x - 1] && d[y][x - 1] > i)continue;
			}
			if (y >= 0 && y < 3){
				if (d[y + 2][x] != 0 && d[y + 1][x] != 0)
				if (d[y + 2][x] < d[y + 1][x] && d[y + 1][x] < i)continue;
				if (d[y + 2][x] > d[y + 1][x] && d[y + 1][x] > i)continue;
			}
			if (x >= 0 && x < 3){
				if (d[y][x + 2] != 0 && d[y][x + 1] != 0)
				if (d[y][x + 2] < d[y][x + 1] && d[y][x + 1] < i)continue;
				if (d[y][x + 2] > d[y][x + 1] && d[y][x + 1] > i)continue;
			}

			d[y][x] = i;
			m[i] = 1;
			bool f = true;
			For(j,0, 5)For(k,0, 5){
				if (d[j][k] == 0){
					f = false;
					ret += dfs(j, k);
					goto BREAK;
				}
			}
		BREAK:;
			if (f)
				ret++;
			m[i] = 0;
			d[y][x] = 0;
		}
	}

	return ret;
}

int main()
{
	int T = 0;
	rep(i, 5)rep(j, 5){
		cin >> d[i][j];
		if (d[i][j]){
			m[d[i][j]] = 1;
			T++;
		}
	}

	ll sum0 = 1;
	For(i, 1, 26){
		sum0 = (sum0 * i) % mod;
	}

	int sum1 = 0;
	rep(i, 5)rep(j, 5){
		if (d[i][j] == 0){
			sum1 = dfs(i, j) % mod;
			break;
		}
	}
	int sum = sum0 - sum1;
	int ans = ((sum % mod) < 0 ? (sum % mod + mod) : (sum % mod));
	if (T == 25)sum1 = 1;
	cout << sum1 << endl;

	return 0;
}

Submission Info

Submission Time
Task D - 25個の整数
User omu
Language C++11 (GCC 4.9.2)
Score 0
Code Size 3299 Byte
Status WA
Exec Time 5033 ms
Memory 928 KB

Judge Result

Set Name Sample Subtask1 Subtask2
Score / Max Score 0 / 0 0 / 30 0 / 70
Status
AC × 4
AC × 12
WA × 7
AC × 12
WA × 15
TLE × 2
Set Name Test Cases
Sample sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt
Subtask1 sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt, test-1-01.txt, test-1-02.txt, test-1-03.txt, test-1-04.txt, test-1-05.txt, test-1-06.txt, test-1-07.txt, test-1-08.txt, test-1-09.txt, test-1-10.txt, test-1-11.txt, test-1-12.txt, test-1-13.txt, test-1-14.txt, test-1-15.txt
Subtask2 sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt, test-1-01.txt, test-1-02.txt, test-1-03.txt, test-1-04.txt, test-1-05.txt, test-1-06.txt, test-1-07.txt, test-1-08.txt, test-1-09.txt, test-1-10.txt, test-1-11.txt, test-1-12.txt, test-1-13.txt, test-1-14.txt, test-1-15.txt, test-2-01.txt, test-2-02.txt, test-2-03.txt, test-2-04.txt, test-2-05.txt, test-2-06.txt, test-2-07.txt, test-2-08.txt, test-2-09.txt, test-2-10.txt
Case Name Status Exec Time Memory
sample-01.txt AC 23 ms 808 KB
sample-02.txt AC 59 ms 800 KB
sample-03.txt AC 24 ms 804 KB
sample-04.txt AC 23 ms 924 KB
test-1-01.txt AC 22 ms 800 KB
test-1-02.txt AC 24 ms 672 KB
test-1-03.txt WA 24 ms 924 KB
test-1-04.txt WA 22 ms 792 KB
test-1-05.txt WA 22 ms 796 KB
test-1-06.txt AC 27 ms 916 KB
test-1-07.txt AC 24 ms 700 KB
test-1-08.txt WA 23 ms 924 KB
test-1-09.txt WA 24 ms 804 KB
test-1-10.txt AC 24 ms 920 KB
test-1-11.txt AC 24 ms 800 KB
test-1-12.txt WA 25 ms 924 KB
test-1-13.txt AC 25 ms 800 KB
test-1-14.txt WA 25 ms 796 KB
test-1-15.txt AC 26 ms 808 KB
test-2-01.txt WA 154 ms 792 KB
test-2-02.txt WA 144 ms 804 KB
test-2-03.txt WA 23 ms 928 KB
test-2-04.txt WA 448 ms 800 KB
test-2-05.txt WA 2492 ms 792 KB
test-2-06.txt TLE 5032 ms 816 KB
test-2-07.txt WA 24 ms 796 KB
test-2-08.txt TLE 5033 ms 800 KB
test-2-09.txt WA 29 ms 776 KB
test-2-10.txt WA 26 ms 804 KB