提出 #577345


ソースコード 拡げる

#include<bits/stdc++.h>
using namespace std;
#define FZ(n) memset((n),0,sizeof(n))
#define FMO(n) memset((n),-1,sizeof(n))
#define F first
#define S second
#define PB push_back
#define ALL(x) begin(x),end(x)
#define SZ(x) ((int)(x).size())
#define IOS ios_base::sync_with_stdio(0); cin.tie(0)
template<typename A, typename B>
ostream& operator <<(ostream &s, const pair<A,B> &p) {
  return s<<"("<<p.first<<","<<p.second<<")";
}
template<typename T>
ostream& operator <<(ostream &s, const vector<T> &c) {
  s<<"[ ";
  for (auto it : c) s << it << " ";
  s<<"]";
  return s;
}
// Let's Fight!

typedef long long LL;
typedef pair<int,int> pii;

const int MX = 105;
const int LOG = 31;

int N, L, a[MX][MX];
pii nxt[MX][MX], at[MX*MX];
pii stp[LOG][MX][MX];
string ip;

void _dump(int x[MX][MX]) {
	cout << "=== begin dump ===" << endl;
	for (int i=0; i<N; i++){
		for (int j=0; j<N; j++) {
			cout << x[i][j] << " ";
		}
		cout << endl;
	}
	cout << "=== end   dump ===" << endl;
}
void matcpy(int dst[MX][MX], int src[MX][MX]) {
	for (int i=0; i<N; i++)
		for (int j=0; j<N; j++)
			dst[i][j] = src[i][j];
}
void rotate(char op, LL t) {
	t--;
	if (op == 'L') {
		int zero = a[t][0];
		for (int i=0; i<N-1; i++)
			a[t][i] = a[t][i+1];
		a[t][N-1] = zero;
	}
	if (op == 'R') {
		int lst = a[t][N-1];
		for (int i=N-1; i>0; i--)
			a[t][i] = a[t][i-1];
		a[t][0] = lst;
	}
	if (op == 'U') {
		int zero = a[0][t];
		for (int i=0; i<N-1; i++)
			a[i][t] = a[i+1][t];
		a[N-1][t] = zero;
	}
	if (op == 'D') {
		int lst = a[N-1][t];
		for (int i=N-1; i>0; i--)
			a[i][t] = a[i-1][t];
		a[0][t] = lst;
	}
}

void buildNxt(int b[MX][MX]) {
	for (int i=0; i<N; i++) {
		for (int j=0; j<N; j++) {
			at[a[i][j]] = {i, j};
		}
	}
	for (int i=0; i<N; i++) {
		for (int j=0; j<N; j++) {
			nxt[i][j] = at[b[i][j]];
		}
	}
}

pii gogo(int x, int y, int t) {
	for (int i=0; t; i++) {
		if (t&1) {
			int nx = stp[i][x][y].F;
			int ny = stp[i][x][y].S;
			x = nx;
			y = ny;
		}
		t >>= 1;
	}
	return {x, y};
}
void rep(int b[MX][MX], int t) {
	for (int i=0; i<N; i++)
		for (int j=0; j<N; j++)
			stp[0][i][j] = nxt[i][j];
	for (int i=1; i<LOG; i++) {
		for (int j=0; j<N; j++) {
			for (int k=0; k<N; k++) {
				int nx = stp[i-1][j][k].F;
				int ny = stp[i-1][j][k].S;
				stp[i][j][k] = stp[i-1][nx][ny];
			}
		}
	}
//	int c[MX][MX];
	for (int i=0; i<N; i++) {
		for (int j=0; j<N; j++) {
			pii tmp = gogo(i, j, t);
			a[tmp.F][tmp.S] = b[i][j];
		}
	}
//	matcpy(b, c);
}

int go(int cur) {
	if (ip[cur] == '(') {
		int b[MX][MX];
		matcpy(b, a);
		int p = cur+1;
		while (ip[p] != ')') {
			if (p > L) assert(false);
			p = go(p);
		}
		p++;
		LL t = 0;
		while (p<L && isdigit(ip[p])) {
			t = t * 10 + ip[p] - '0';
			p++;
		}
		buildNxt(b);
		rep(b, t);
		return p;
	} else {
		int p = cur+1;
		LL t = 0;
		while (p < L && isdigit(ip[p])) {
			t = t * 10 + ip[p] - '0';
			p++;
		}
		rotate(ip[cur], t);
		return p;
	}
}

int main() {
	IOS;
	while (cin >> N >> L) {
		cin >> ip;
		for (int i=0, s=1; i<N; i++) {
			for (int j=0; j<N; j++) {
				a[i][j] = s++;
			}
		}

		int p=0;
		while (p < L) {
			p = go(p);
		}
		for (int i=0; i<N; i++) {
			for (int j=0; j<N; j++) {
				cout << a[i][j];
				if (j == N-1) cout << endl;
				else cout << " ";
			}
		}
	}

	return 0;
}

提出情報

提出日時
問題 E - Shifting a Matrix
ユーザ bcw0x1bd2
言語 C++11 (GCC 4.8.1)
得点 100
コード長 3451 Byte
結果 AC
実行時間 404 ms
メモリ 18012 KiB

ジャッジ結果

セット名 All
得点 / 配点 100 / 100
結果
AC × 49
セット名 テストケース
All 00_sample_00, 00_sample_01, 00_sample_02, 10_basic_rnd_small_000, 10_basic_rnd_small_001, 10_basic_rnd_small_002, 10_basic_rnd_small_003, 10_basic_rnd_small_004, 11_basic_rnd_med_000, 11_basic_rnd_med_001, 11_basic_rnd_med_002, 11_basic_rnd_med_003, 11_basic_rnd_med_004, 12_basic_rnd_med_000, 12_basic_rnd_med_001, 12_basic_rnd_med_002, 12_basic_rnd_med_003, 12_basic_rnd_med_004, 13_basic_rnd_large_000, 13_basic_rnd_large_001, 13_basic_rnd_large_002, 13_basic_rnd_large_003, 13_basic_rnd_large_004, 13_basic_rnd_large_005, 13_basic_rnd_large_006, 13_basic_rnd_large_007, 13_basic_rnd_large_008, 13_basic_rnd_large_009, 23_many_loop_rnd_large_000, 23_many_loop_rnd_large_001, 23_many_loop_rnd_large_002, 23_many_loop_rnd_large_003, 23_many_loop_rnd_large_004, 23_many_loop_rnd_large_005, 23_many_loop_rnd_large_006, 23_many_loop_rnd_large_007, 23_many_loop_rnd_large_008, 23_many_loop_rnd_large_009, 33_low_loop_large_000, 33_low_loop_large_001, 33_low_loop_large_002, 33_low_loop_large_003, 33_low_loop_large_004, 33_low_loop_large_005, 33_low_loop_large_006, 33_low_loop_large_007, 33_low_loop_large_008, 33_low_loop_large_009, 90_challenge_00
ケース名 結果 実行時間 メモリ
00_sample_00 AC 30 ms 3616 KiB
00_sample_01 AC 29 ms 3744 KiB
00_sample_02 AC 29 ms 3740 KiB
10_basic_rnd_small_000 AC 29 ms 3748 KiB
10_basic_rnd_small_001 AC 31 ms 3620 KiB
10_basic_rnd_small_002 AC 28 ms 3624 KiB
10_basic_rnd_small_003 AC 31 ms 3616 KiB
10_basic_rnd_small_004 AC 30 ms 3740 KiB
11_basic_rnd_med_000 AC 29 ms 3624 KiB
11_basic_rnd_med_001 AC 31 ms 3624 KiB
11_basic_rnd_med_002 AC 31 ms 3744 KiB
11_basic_rnd_med_003 AC 30 ms 3740 KiB
11_basic_rnd_med_004 AC 30 ms 3744 KiB
12_basic_rnd_med_000 AC 31 ms 3740 KiB
12_basic_rnd_med_001 AC 31 ms 3740 KiB
12_basic_rnd_med_002 AC 30 ms 3736 KiB
12_basic_rnd_med_003 AC 29 ms 3748 KiB
12_basic_rnd_med_004 AC 33 ms 3744 KiB
13_basic_rnd_large_000 AC 76 ms 4464 KiB
13_basic_rnd_large_001 AC 70 ms 4384 KiB
13_basic_rnd_large_002 AC 75 ms 4388 KiB
13_basic_rnd_large_003 AC 142 ms 4844 KiB
13_basic_rnd_large_004 AC 159 ms 4896 KiB
13_basic_rnd_large_005 AC 177 ms 5028 KiB
13_basic_rnd_large_006 AC 109 ms 4772 KiB
13_basic_rnd_large_007 AC 81 ms 4512 KiB
13_basic_rnd_large_008 AC 71 ms 4392 KiB
13_basic_rnd_large_009 AC 108 ms 4508 KiB
23_many_loop_rnd_large_000 AC 97 ms 5652 KiB
23_many_loop_rnd_large_001 AC 138 ms 6048 KiB
23_many_loop_rnd_large_002 AC 156 ms 6684 KiB
23_many_loop_rnd_large_003 AC 197 ms 7072 KiB
23_many_loop_rnd_large_004 AC 91 ms 5408 KiB
23_many_loop_rnd_large_005 AC 92 ms 5664 KiB
23_many_loop_rnd_large_006 AC 100 ms 5916 KiB
23_many_loop_rnd_large_007 AC 211 ms 6180 KiB
23_many_loop_rnd_large_008 AC 201 ms 6752 KiB
23_many_loop_rnd_large_009 AC 211 ms 6944 KiB
33_low_loop_large_000 AC 72 ms 4000 KiB
33_low_loop_large_001 AC 61 ms 4000 KiB
33_low_loop_large_002 AC 50 ms 3876 KiB
33_low_loop_large_003 AC 40 ms 3744 KiB
33_low_loop_large_004 AC 71 ms 4128 KiB
33_low_loop_large_005 AC 48 ms 3872 KiB
33_low_loop_large_006 AC 59 ms 3996 KiB
33_low_loop_large_007 AC 60 ms 4000 KiB
33_low_loop_large_008 AC 63 ms 4124 KiB
33_low_loop_large_009 AC 69 ms 3996 KiB
90_challenge_00 AC 404 ms 18012 KiB