自闭场还没补,先放一个模拟
F - Secret Poems
按照第一个矩阵的顺序解析出来字符串,然后按照第二个矩阵的顺序将字符放进去。
两个矩阵分别是比较熟悉的蛇形矩阵和从来没写过的蛇形矩阵……
#include <bits/stdc++.h>
#include<cstring>
#define ll long long
using namespace std;
const int MAXN =101;
char s[MAXN*MAXN];
int a[MAXN][MAXN];
char c[MAXN][MAXN],b[MAXN][MAXN];
int dx[4] = {0,1,0,-1};
int dy[4] = {1,0,-1,0};
int main()
{
//freopen("input.txt","r",stdin);
int n;
while(cin>>n)
{
for(int i = 1; i<=n; i++)
{
for(int j =1; j<=n; j++)
{
cin>>c[i][j];
}
}
int tot = 0;
int px = 1,py = 1;
int dir = 0;
while(tot < n*n)
{
s[tot++] = c[px][py];
if(px != n && px != 1 && py !=n && py != 1)
{
if(dir)
px += 1,py -= 1;
else
px = px-1,py = py+1;
}
else
{
dir ^= 1;
if(py == n)
{
px = px +1;
s[tot++] = c[px][py];
if(dir)
px += 1,py -= 1;
else
px = px-1,py = py+1;
}
else if(px == n)
{
py += 1;
s[tot++] = c[px][py];
if(dir)
px += 1,py -= 1;
else
px = px-1,py = py+1;
}
else if(px == 1)
{
py += 1;
s[tot++] = c[px][py];
if(dir)
px += 1,py -= 1;
else
px = px-1,py = py+1;
}
else if(py == 1)
{
px = px + 1;
s[tot++] = c[px][py];
if(dir)
px += 1,py -= 1;
else
px = px-1,py = py+1;
}
}
}
memset(a,-1,sizeof(a));
for(int i = 1;i<=n;i++) for(int j = 1;j<=n;j++) a[i][j] = 0;
px = 1,py = 1,tot = 0;
int t = 0;
while(tot < n*n)
{
b[px][py] = s[tot++];
a[px][py] = -1;
px += dx[t];
py += dy[t];
if(a[px+dx[t]][py+dy[t]] == -1)
{
t++;
if(t == 4) t =0;
}
//cout<<px<<' '<<py<<endl;
}
//cout<<s<<endl;
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=n;j++)
{
cout<<b[i][j];
}
cout<<endl;
}
}
return 0;
}