abc 375C
作者:
Air1222
,
2024-10-12 22:30:35
,
所有人可见
,
阅读 5
//首先数字题,打表找规律
//发现从最外层到最内层不断旋转
//如何旋转?(比赛时未码出来)
//数学规律,g[i][j]会旋转到g[j][n+1-i]
//或者暴力,每一行都储存即可
//注意要逆着拷贝方向复制,且重合点要单独处理
//不要怕代码量而去逼自己找数学规律(坏习惯)
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <map>
#include <cmath>
#define x first
#define y second
using namespace std;
typedef long long LL;
const int N = 3010;
char g[N][N];
bool st[N];
int n;
char s[N];
void f(int k)
{
int a=k,b=n+1-k;
int cnt=0;
for(int i=b;i>=a;i--) s[cnt++]=g[i][b];
cnt=0;
for(int i=a;i<=b;i++)
{
g[i][n+1-k]=g[k][i];
g[k][n+1-i]=g[i][k];
g[i][n+1-b]=g[b][i];
g[b][i]=s[cnt++];
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) scanf("%s",g[i]+1);
int x=n/2;
int cnt=1;
for(int k=1;k<=x;k++)
{
int res=k%4;
while(res)
{
f(k);
res--;
}
}
for(int i=1;i<=n;i++)
cout<<g[i]+1<<endl;
return 0;
}
注意要分别复制,不然一行没复制完,当前行就被下一行给复制了