思路
可以先暴力打表(dfs)找规律。很多与矩阵有关的题都是可以先打表来找规律的(dls最开始就是这么干的,虽然最后失败了qaq),记得之前牛客多校上的一道无限矩阵的题最后就是用dfs打表才找到了规律...
此题主要分为3种情况(m,n为矩阵的h和w):
1.m,n皆为奇,矩阵的goodness值永远为1,只需全部用(输出即可
2.m,n为一奇一偶,矩阵的goodness为偶数边的值,稍微分类讨论一下即可。
3.m,n皆为偶,也是最复杂的一种情况。分为三种小情况:m,n的最小值为2;m,n的最小值为4;m,n为剩余情况。 (1)m,n当中有2,可以参照上一种情况做。 (2)m,n当中有4,需要单独来讨论 (3)m,n最小值大于4,可以通过这两个例子发现规律: m=6,n=6时: m=8,n=8时:
自己WA的原因: 1.m,n都为偶时,其最小值==4的情况要单独拿出来分析! 2. 在上个情况时,没有注意到())( 这种矩阵的goodness值是为1的
附上代码:
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
#define rep(i,a,n) for(int i=a;i<n;i++)
int main(){
int T;
scanf("%d",&T);
while(T--){
int m,n;
scanf("%d%d",&m,&n);
d=n;
if(m%2==1&&n%2==1){
for(int i=0;i<m;i++){
for(int j=0;j<n;j++)
printf("(");
printf("\n");
}
}
else if(m%2==1&&n%2==0){
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(j%2==0)
printf("(");
else
printf(")");
}
printf("\n");
}
}
else if(m%2==0&&n%2==1){
for(int i=0;i<m;i++){
if(i%2==0)
for(int j=0;j<n;j++)
printf("(");
else
for(int j=0;j<n;j++)
printf(")");
printf("\n");
}
}
else{
if(m==2||n==2){
if(m>n){
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(j%2==0)
printf("(");
else
printf(")");
}
printf("\n");
}
}
else{
for(int i=0;i<m;i++){
if(i%2==0)
for(int j=0;j<n;j++)
printf("(");
else
for(int j=0;j<n;j++)
printf(")");
printf("\n");
}
}
continue;
}
else if(m==4||n==4){
int f[210][210];
swap(m,n);
int p=min(m,n),q=max(m,n);
if(p<=4){
rep(i,0,p){
rep(j,0,q/2) f[i][j]=i&1;
rep(j,0,q/2) f[i][j+q/2]=(i&1)^(i!=0&&i!=p-1);
}
if(n<m){
rep(i,0,n){
rep(j,0,m) putchar(f[i][j]?')':'(');
puts("");
}
}
else{
rep(i,0,n){
rep(j,0,m) putchar(f[j][i]?')':'(');
puts("");
}
}
}
continue;
}
for(int i=0;i<m;i++){
if(i==0){
for(int j=0;j<n;j++)
printf("(");
printf("\n");
}
else if(i==m-1){
for(int j=0;j<n;j++)
printf(")");
printf("\n");
}
else if(i%2==1){
for(int j=0;j<n;j++){
if(j%2==0)
printf("(");
else
printf(")");
}
printf("\n");
}
else if(i%2==0){
for(int j=0;j<n;j++){
if(j==0)
printf("(");
else if(j==n-1)
printf(")");
else if(j%2==1)
printf("(");
else
printf(")");
}
printf("\n");
}
}
}
}
return 0;
}