HDU 6400(括号组合 ~)
题意是说在 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(括号组合 ~)的更多相关文章
- Leetcode22. Generate Parentheses(生成有效的括号组合)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/74937307冷血之心的博客) 题目如下:
- PHP美元符和花括号组合那些事—${${}}
双美元符+{}:${${variable}}是一种比较常见的用法,但是它的实现原理是什么呢?今天来探究一下: 提及这种用法,还得先说一下PHP的String类型php.net上指出,一个字符串可以用4 ...
- hdu 4915 括号匹配+巧模拟
http://acm.hdu.edu.cn/showproblem.php?pid=4915 给定一个序列,由()?组成,其中?可以表示(或者),问说有一种.多种或者不存在匹配. 从左向右,优先填满n ...
- LeetCode 32 Longest Valid Parentheses(最长合法的括号组合)
题目链接: https://leetcode.com/problems/longest-valid-parentheses/?tab=Description Problem :已知字符串s,求出其 ...
- HDU 1521 排列组合 指数型母函数
排列组合 Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u Submit Status D ...
- Hdu 1521 排列组合
a1 n1 a2 n2 ... ak nkn=n1+n2+...+nk从n个数中选r个排列(不是组合噢)// 指数型母函数// 模板#include <iostream> #include ...
- HDU 1536 S-Nim (组合游戏+SG函数)
题意:针对Nim博弈,给定上一个集合,然后下面有 m 个询问,每个询问有 x 堆石子 ,问你每次只能从某一个堆中取出 y 个石子,并且这个 y 必须属于给定的集合,问你先手胜还是负. 析:一个很简单的 ...
- LeetCode 22 Generate Parentheses(找到所有匹配的括号组合)
题目链接 : https://leetcode.com/problems/generate-parentheses/?tab=Description 给一个整数n,找到所有合法的 () pairs ...
- hdu 6400 Parentheses Matrix
题目链接 Problem Description A parentheses matrix is a matrix where every element is either '(' or ')'. ...
随机推荐
- CSAPC2008 skyline
一座山的山稜线由许多片段的45度斜坡构成,每一个片段不是上坡就是下坡. * * * /\* /\ /\/ \/\/ \/ \ 在我们眼前的所见的任何宽度为n个单位的 ...
- 2018-01微信小程序--直播
一. 小程序直播支持的格式 目前小程序支付两种格式直播 1) flv格式直播 2) rtmp格式直播 二. 能够开通小程序直播的行业类目 由于直播需要资质, 并不是每个企业都能够开通小程序直播, 微信 ...
- 【Tsinsen A1339】JZPLCM (树状数组)
Description 原题链接 给定一长度为\(~n~\)的正整数序列\(~a~\),有\(~q~\)次询问,每次询问一段区间内所有数的\(~LCM~\)(即最小公倍数).由于答案可能很大,输出 ...
- BSGS及扩展BSGS总结(BSGS,map)
蒟蒻哪里有什么总结,只能点击%YL% 还有这位ZigZagK大佬的blog \(\mbox{BSGS}\) 模板题:洛谷P3846 [TJOI2007]可爱的质数 给定\(a,b\)和模数\(\mbo ...
- linux中shell脚本引用另一shell脚本
调用有三种方法: 1.fork:不同的shell,调用后返回父shell,子shell从父shell中继承变量,但子shell的变量不会带回父shell,直接用path/to/file.sh调用: 2 ...
- Age of Moyu HDU - 6386 (杭电多校7A)
给出n和点,m条边,每条边有各自的标号,进入第一个标号需要消耗1的费用,此后转换标号需要1费用,在同一个标号上走不需要费用.问你从1到n最少需要多少费用. 最短路变形,把第一个点看成不存在的标号,然后 ...
- JQ动态生成的元素,原事件绑定失效
Old Code: $('code').click(function () { console.log($(this).text()); }); New Code:(.container 是<c ...
- webpack入门(五)webpack CLI
webpack的CLI安装和命令 Installation $ npm install webpack -g The webpack command is now available globally ...
- git init github
Command line instructions 执行这些命令是在windows 右菜单里面的git bash运行. Git global setup git config --global use ...
- @Async的简单用法总结
前言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的:但是在处理与第三方系统交互的时 候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3 ...