题意是说在 h 行 w 列的矩阵中,通过设计使得尽可能多的行或列能满足题中的平衡条件。

如果行数(列数)是奇数,那么每一列(行)一定不能平衡,就要按照满足每一行(列)平衡,输出“ () “;若行数和列数同时是奇数,则设计不出任何一行或一列平衡;

当行数和列数同时为偶数时,情况是最复杂的,开始的时候只是想到两个数字谁大就去满足谁的平衡,结果完全不对,因为不只是“ ()()() ”是平衡的,像“ ((())) ”这种也是平衡的。也就是说在行满足平衡条件的同时列也可能满足平衡条件,比如:

" (((( " 就在满足每一列平衡的同时多满足了一行,然后......然后我智商就不够了。看了别人的博客才知道,可以通过“牺牲”掉最外面的一圈,也就是两行和两列,其他各行各列就都能平衡,也就是都能达到 ans = h + w - 4 ;但是在行数和列数的最小值小于 4 的时候,这种

()()     “牺牲”的做法并不是最优的,此时通过暴力的方法去枚举找到(2,2),(2,4),(4,2),(4,4)的图案即可。

)()(    这种做法是怎么想出来的呢?请移步去大佬的博客吧.......

))))

 #include <bits/stdc++.h>
using namespace std;
int main()
{
int t,a,b;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&a,&b);
if((a&)&&(b&))
{
for(int i = ; i < a; i++)
{
for(int j = ; j < b; j++)
printf("(");
printf("\n");
}
}
else if((a&)&&!(b&))
{
for(int i = ; i < a; i++)
{
for(int j = ; j < b; j++)
if(j&) printf(")");
else printf("(");
printf("\n");
}
}
else if(!(a&)&&(b&))
{
for(int i = ; i < a; i++)
{
for(int j = ; j < b; j++)
if(i&) printf(")");
else printf("(");
printf("\n");
}
}
else
{
/* if(a > b)
{
for(int i = 0; i < a; i++)
{
for(int j = 0; j < b; j++)
if(j&1) printf(")");
else printf("(");
printf("\n");
}
}
else
{
for(int i = 0; i < a; i++)
{
for(int j = 0; j < b; j++)
if(i&1) printf(")");
else printf("(");
printf("\n");
}
}
*/
if(a== && b==)
{
puts("()");
puts(")(");
continue;
}
if(b==)
{
for(int i = ; i < a; i++)
puts("()");
continue;
}
if(a==)
{
for(int i = ; i < b; i++)
printf("(");
printf("\n");
for(int i = ; i < b; i++)
printf(")");
printf("\n");
continue;
}
if(a==)
{
for(int i = ; i < b; i++)
printf("(");
printf("\n");
for(int i = ; i < b; i++)
{
if(i < b/)printf(")");
else printf("(");
}
printf("\n");
for(int i = ; i < b; i++)
{
if(i < b/)printf("(");
else printf(")");
}
printf("\n");
for(int i = ; i < b; i++)
printf(")");
printf("\n");
continue;
}
if(b==)
{
for(int i = ; i < a; i++)
{
if(i < a/) puts("()()");
else puts("(())");
}
continue;
}
for(int i = ; i < a; i++)
{
for(int j = ; j < b; j++)
{
if(i == || j == ) printf("(");
else if(i == a- || j == b-) printf(")");
else
{
if(j == ) printf("(");
else if(j == b-) printf(")");
else
{
if(!(i&))
if(j&) printf("(");
else printf(")");
else
if(j&) printf(")");
else printf("(");
}
}
}
printf("\n");
}
}
}
return ;
}

HDU 6400(括号组合 ~)的更多相关文章

  1. Leetcode22. Generate Parentheses(生成有效的括号组合)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/74937307冷血之心的博客) 题目如下:

  2. PHP美元符和花括号组合那些事—${${}}

    双美元符+{}:${${variable}}是一种比较常见的用法,但是它的实现原理是什么呢?今天来探究一下: 提及这种用法,还得先说一下PHP的String类型php.net上指出,一个字符串可以用4 ...

  3. hdu 4915 括号匹配+巧模拟

    http://acm.hdu.edu.cn/showproblem.php?pid=4915 给定一个序列,由()?组成,其中?可以表示(或者),问说有一种.多种或者不存在匹配. 从左向右,优先填满n ...

  4. LeetCode 32 Longest Valid Parentheses(最长合法的括号组合)

    题目链接: https://leetcode.com/problems/longest-valid-parentheses/?tab=Description   Problem :已知字符串s,求出其 ...

  5. HDU 1521 排列组合 指数型母函数

    排列组合 Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Status D ...

  6. Hdu 1521 排列组合

    a1 n1 a2 n2 ... ak nkn=n1+n2+...+nk从n个数中选r个排列(不是组合噢)// 指数型母函数// 模板#include <iostream> #include ...

  7. HDU 1536 S-Nim (组合游戏+SG函数)

    题意:针对Nim博弈,给定上一个集合,然后下面有 m 个询问,每个询问有 x 堆石子 ,问你每次只能从某一个堆中取出 y 个石子,并且这个 y 必须属于给定的集合,问你先手胜还是负. 析:一个很简单的 ...

  8. LeetCode 22 Generate Parentheses(找到所有匹配的括号组合)

    题目链接 : https://leetcode.com/problems/generate-parentheses/?tab=Description   给一个整数n,找到所有合法的 () pairs ...

  9. hdu 6400 Parentheses Matrix

    题目链接 Problem Description A parentheses matrix is a matrix where every element is either '(' or ')'. ...

随机推荐

  1. 【比赛】NOIP2018 旅行

    发现 \(m\) 只有两种取值,于是可做了 树的直接贪心 图的枚举环上的边去掉,然后做树的贪心,搜的时候剪一下枝吧 写得有点乱 #include<bits/stdc++.h> #defin ...

  2. rt-thread之串口设备的配置流程

    @2019-01-30 [小记] > rt-thread 工程启动之后先是进入函数 rtthread_startup 做一些系统运行前的基础工作,主要有: * 板级硬件初始化 * 系统定时器初始 ...

  3. __init__、__new__、__call__ 方法

    __init__方法 __init__方法负责对象的初始化,系统执行该方法前,其实该对象已经存在了,要不然初始化什么东西呢?先看例子: # class A(object): python2 必须显示地 ...

  4. 华东交通大学2018年ACM“双基”程序设计竞赛部分题解

    链接:https://ac.nowcoder.com/acm/contest/221/C来源:牛客网 C-公式题(2) 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其 ...

  5. 模拟@Test的功能实现

    注解和注释区别 * 注释:给程序员看的.* 注解:给虚拟机看的.(让虚拟机看到程序中的注解,注解代表程序的一些特殊的功能.) JDK中提供的注解 @Override :描述子类重写父类的方法: * J ...

  6. Spring Data JPA Batch Insertion

    转自:https://www.jeejava.com/spring-data-jpa-batch-insertion/ Spring Data JPA Batch Insertion will sho ...

  7. SpringBoot学习笔记(6) SpringBoot数据缓存Cache [Guava和Redis实现]

    https://blog.csdn.net/a67474506/article/details/52608855 Spring定义了org.springframework.cache.CacheMan ...

  8. [HEOI2014]平衡

    [HEOI2014]平衡 转化为求选择k个数,和为(n+1)*k的方案数 保证,每个数[1,2*n+1]且最多选择一次. 限制k个很小,所以用整数划分的第二种方法 f[i][j],用了i个,和为j 整 ...

  9. [luogu3388][割点]

    题目链接 思路 真板子题.割点是指在一个无向图中,删去之后图将不再连通的点.可以用tarjan算法求.根据割点有两种情况,一种是根,一种是非根.如果不是根的就去判断在tarjan的时候当前节点所能到的 ...

  10. (六)Oracle 的 oracle表查询关键字

    参考:http://www.hechaku.com/Oracle/oracle_tables2.html 1.使用逻辑操作符号问题:查询工资高于500或者是岗位为manager的雇员,同时还要满足他们 ...