跳到主要内容
238 词数1 分钟

题解:P8242 [COCI 2013/2014

题意简述

给一个 m×nm\times n 的字母网格,四周加上宽度分别为 u,l,r,du,l,r,d 的边框。边框是 #. 交替的棋盘,整张图左上角为 #、相邻格不同;字母区保留原字母。输出最终 (u+m+d)×(l+n+r)(u+m+d)\times(l+n+r) 的图。

解题思路

直接按位置输出。整张图行列号从 11 起,左上角 (1,1)(1,1)#,棋盘满足 i+ji+j 为偶时填 #、为奇时填 .。字母区是行 [u+1,u+m][u+1,u+m]、列 [l+1,l+n][l+1,l+n],落在其中就输出对应原字母 aiu,jla_{i-u,j-l},否则按 i+ji+j 的奇偶填 #.

时间复杂度为 O((u+m+d)(l+n+r))O\bigl((u+m+d)(l+n+r)\bigr)

参考代码

419 Bcpp
#include <bits/stdc++.h>
using namespace std;

const int N=15;
char a[N][N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int m,n,u,l,r,d;
cin>>m>>n>>u>>l>>r>>d;
for(int i=1;i<=m;i++)for(int j=1;j<=n;j++)cin>>a[i][j];
for(int i=1;i<=u+m+d;i++)
{
for(int j=1;j<=l+n+r;j++)
{
if(i>u&&i<=u+m&&j>l&&j<=l+n)cout<<a[i-u][j-l];
else cout<<((i+j)%2==0?'#':'.');
}
cout<<'\n';
}
return 0;
}