题意是说在 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. 爬虫_豆瓣电影top250 (正则表达式)

    一样的套路,就是多线程还没弄 import requests import re import json headers = 'Mozilla/5.0 (Windows NT 10.0; WOW64) ...

  2. 自学zabbix集锦

    zabbix概念集锦 01 Zabbix采集数据方式 02 开源监控软件Cacti.nagios 03 Zabbix常用的术语 04 Zabbix核心概念回顾 05 Zabbix triggers-- ...

  3. NOIP经典基础模板总结

    date: 20180820 spj: 距离NOIP还有81天 目录 STL模板: priority_queue 的用法:重载<,struct cmpqueue 的用法 stack 的用法vec ...

  4. Codeforces | CF1041F 【Ray in the tube】

    昨天晚上全机房集体开\(Div2\),因为人傻挂两次\(B\)题的我开场就\(rank2000+\dots qwq\)于是慌乱之中的我就开始胡乱看题(口胡),于是看了\(F\dots\)(全机房似乎也 ...

  5. Nginx代理MysqlCluster集群

    -------Nginx代理MysqlCluster 公司有一个公网ip,有公网ip(222.222.222.222)那台服务器上装的nginx,mysql装在公司另外一台服务器上假设ip为192.1 ...

  6. 【算法】php计算数字k在一段数字范围出现的次数

    计算数字k在0到n中的出现的次数,k可能是[0~9]内的一个值. 例如数字n=25,k=1,在1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...

  7. Vagrant 中配置局域网端口

    1. 在自己的电脑中想使用Vagrant在局域网中安装centos,并将其ip释放到局域网中提供给自己的机器访问,这种操作需要在VagrantFile中加入如下配置 config.vm.network ...

  8. Linux添加新硬盘及分区,格式化,挂载

    1.查看分区信息: [root@localhost /]# fdisk -l Disk /dev/vdb: 209.7 GB, 209715200000 bytes16 heads, 63 secto ...

  9. 如何搭建高可用redis架构?

    如何搭建高可用redis架构? 温国兵 架构师小秘圈 昨天 作者:温国兵,曾任职于酷狗音乐,现为三七互娱 DBA.目前主要关注领域:数据库自动化运维.高可用架构设计.数据库安全.海量数据解决方案.以及 ...

  10. bzoj2553 禁忌

    题目链接 题意 给出一个\(n\)个字符串的字典.对于一个字符串,他的贡献是这个字符串中最多的在字典中出现的不重叠子串的数量. 然后问一个长度为\(len\)的,字符集为前\(alphabet\)个字 ...