提出 #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 | ||
| 結果 |
|
| セット名 | テストケース |
|---|---|
| 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 |