提出 #577608


ソースコード 拡げる

#include<vector>
#include<iostream>
#include<map>
#include<numeric>
#include<algorithm>
#include<set>
#include<queue>
#include<cassert>
#include<cstring>
#include<cstdio>
#include<cstdlib>

using namespace std;
#define REP(i, n) for(int i=0;i<(int)n;i++)
#define REPS(i, n) for(int i=1;i<=(int)n;i++)
#define RREP(i, n) for(int i=n-1;i>=0;i--)
#define RREPS(i, n) for(int i=n;i>0;i--)
#define ALL(v) v.begin(), v.end()
#define RALL(v) v.rbegin(), v.rend()
#define pb push_back
#define eb emplace_back
#define mp make_pair

typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;

template<class T>
ostream &operator<<(ostream &os, const vector<T> &v){
	os << "[";
	REP(i, v.size()){
		if(i) os << ",";
		os << v[i];
	}
	return os << "]";
}

const int INF = 1<<29;	
int T, n, m;
string s;

vi mul(const vi &a, const vi &b){
	vi res(a.size());
	REP(i, a.size()) res[i] = b[a[i]];
	return res;
}

vi pow(vi a, ll k){
	vi res(n*n);
	iota(ALL(res), 0);
	while(k){
		if(k&1) res = mul(res, a);
		a = mul(a, a);
		k /= 2;
	}
	return res;
}

ll num(int &i){
	ll res = 0;
	while(i < s.size() && isdigit(s[i])){
		res = res * 10 + s[i ++] - '0';
	}
	return res;
}

vi ope(int &i){
	char c = s[i++];
	int k = num(i) - 1;
	vi res(n*n);
	iota(ALL(res), 0);
	REP(i, n){
		if(c == 'D') res[i*n+k] = (i+1)%n*n+k;
		else if(c == 'U') res[i*n+k] = (i+n-1)%n*n+k;
		else if(c == 'R') res[k*n+i] = k*n+(i+1)%n;
		else if(c == 'L') res[k*n+i] = k*n+(i+n-1)%n;
		else assert(false);
	}
	return res;
}

vi seq(int &i){
	vi res(n*n);
	iota(ALL(res), 0);
	if(i == s.size()) return res;
	while(i < s.size() && s[i] != ')'){
		vi ret;
		if(s[i] == '('){
			ret = seq(++i);
			assert(s[i++] == ')');
			ll k = num(i);
			ret = pow(ret, k);
		}else if(isupper(s[i])){
			ret = ope(i);
		}else assert(false);
		res = mul(res, ret);
	}
	return res;
}

int main(){
	while(cin >> n >> m >> s){
		int i = 0;
		vi res = seq(i);

		vi ans(n*n);
		REP(i, n*n) ans[res[i]] = i + 1;
		REP(i, n)REP(j, n){
			cout << ans[i*n+j] << " \n"[j+1 == n];
		}
	}
	return 0;	
}

提出情報

提出日時
問題 E - Shifting a Matrix
ユーザ zerokugimachine
言語 C++11 (GCC 4.8.1)
得点 100
コード長 2185 Byte
結果 AC
実行時間 105 ms
メモリ 13980 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 26 ms 728 KiB
00_sample_01 AC 25 ms 920 KiB
00_sample_02 AC 26 ms 732 KiB
10_basic_rnd_small_000 AC 24 ms 920 KiB
10_basic_rnd_small_001 AC 25 ms 916 KiB
10_basic_rnd_small_002 AC 23 ms 800 KiB
10_basic_rnd_small_003 AC 25 ms 920 KiB
10_basic_rnd_small_004 AC 25 ms 924 KiB
11_basic_rnd_med_000 AC 25 ms 920 KiB
11_basic_rnd_med_001 AC 25 ms 692 KiB
11_basic_rnd_med_002 AC 23 ms 920 KiB
11_basic_rnd_med_003 AC 26 ms 796 KiB
11_basic_rnd_med_004 AC 23 ms 672 KiB
12_basic_rnd_med_000 AC 24 ms 676 KiB
12_basic_rnd_med_001 AC 22 ms 928 KiB
12_basic_rnd_med_002 AC 23 ms 800 KiB
12_basic_rnd_med_003 AC 24 ms 928 KiB
12_basic_rnd_med_004 AC 22 ms 800 KiB
13_basic_rnd_large_000 AC 39 ms 1184 KiB
13_basic_rnd_large_001 AC 36 ms 1188 KiB
13_basic_rnd_large_002 AC 39 ms 1192 KiB
13_basic_rnd_large_003 AC 61 ms 1792 KiB
13_basic_rnd_large_004 AC 68 ms 1880 KiB
13_basic_rnd_large_005 AC 72 ms 2104 KiB
13_basic_rnd_large_006 AC 50 ms 1444 KiB
13_basic_rnd_large_007 AC 42 ms 1196 KiB
13_basic_rnd_large_008 AC 39 ms 1184 KiB
13_basic_rnd_large_009 AC 54 ms 1636 KiB
23_many_loop_rnd_large_000 AC 52 ms 1832 KiB
23_many_loop_rnd_large_001 AC 70 ms 2340 KiB
23_many_loop_rnd_large_002 AC 73 ms 2856 KiB
23_many_loop_rnd_large_003 AC 95 ms 3684 KiB
23_many_loop_rnd_large_004 AC 47 ms 1568 KiB
23_many_loop_rnd_large_005 AC 49 ms 1824 KiB
23_many_loop_rnd_large_006 AC 54 ms 2080 KiB
23_many_loop_rnd_large_007 AC 100 ms 3168 KiB
23_many_loop_rnd_large_008 AC 88 ms 3236 KiB
23_many_loop_rnd_large_009 AC 95 ms 3616 KiB
33_low_loop_large_000 AC 48 ms 1248 KiB
33_low_loop_large_001 AC 40 ms 1056 KiB
33_low_loop_large_002 AC 34 ms 1056 KiB
33_low_loop_large_003 AC 29 ms 928 KiB
33_low_loop_large_004 AC 44 ms 1308 KiB
33_low_loop_large_005 AC 33 ms 976 KiB
33_low_loop_large_006 AC 40 ms 1052 KiB
33_low_loop_large_007 AC 41 ms 1068 KiB
33_low_loop_large_008 AC 39 ms 1048 KiB
33_low_loop_large_009 AC 43 ms 1180 KiB
90_challenge_00 AC 105 ms 13980 KiB