分析:
很有趣的一道题目啊。。。
毕竟是构造题,没什么思路可言,这里直接给出两种构造方式:
当然,首先排除掉nn或
为奇数的情况,
对于n、m都为偶数的情况:
1、1、
这里只讨论n>mn>m的情况(如果m>nm>n把矩形横过来看即可)
第一列全为”(“,最后一列全为”)”
中间按照行和列的奇偶性
这么放的答案为n+(m?2)2n+(m?2)2
2、2、
第一行与第一列全为“(”,最后一行与最后一列全为“)”(相交的位置任意放)
中间还是按照行和列的奇偶性放
这么放的答案为n+m?4n+m?4
当min{ n,m}≤4min{n,m}≤4时,使用1方案,否则使用2方案
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#define SF scanf
#define PF printf
#define MAXN 210
using namespace std;
int t,n,m;
int a[MAXN][MAXN];
int main(){SF("%d",&t);while(t--){SF("%d%d",&n,&m);if(n%2==1){for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)a[i][j]=(j<=(m/2));}else if(m%2==1){for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)a[i][j]=(i<=(n/2));}else {if(min(n,m)<=4){if(n<m){for(int i=1;i<=m;i++){a[1][i]=1;a[n][i]=0;}for(int i=2;i<n;i++)for(int j=1;j<=m;j++){a[i][j]=((j%2)^(i%2)); }}else{for(int i=1;i<=n;i++){a[i][1]=1;a[i][m]=0; }for(int i=1;i<=n;i++)for(int j=2;j<m;j++){a[i][j]=((j%2)^(i%2)); }}}else{for(int i=1;i<=m;i++)a[1][i]=1;for(int i=1;i<n;i++)a[i][1]=1;for(int i=2;i<=n;i++)a[i][m]=0;for(int i=1;i<=m;i++)a[n][i]=0;for(int i=2;i<n;i++)for(int j=2;j<m;j++)a[i][j]=((i%2)^(j%2));}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(a[i][j]==1)PF("(");elsePF(")");}PF("\n");}}
}