HDU 6400(括号组合 ~)
题意是说在 h 行 w 列的矩阵中,通过设计使得尽可能多的行或列能满足题中的平衡条件。
如果行数(列数)是奇数,那么每一列(行)一定不能平衡,就要按照满足每一行(列)平衡,输出“ () “;若行数和列数同时是奇数,则设计不出任何一行或一列平衡;
当行数和列数同时为偶数时,情况是最复杂的,开始的时候只是想到两个数字谁大就去满足谁的平衡,结果完全不对,因为不只是“ ()()() ”是平衡的,像“ ((())) ”这种也是平衡的。也就是说在行满足平衡条件的同时列也可能满足平衡条件,比如:
" (((( " 就在满足每一列平衡的同时多满足了一行,然后......然后我智商就不够了。看了别人的博客才知道,可以通过“牺牲”掉最外面的一圈,也就是两行和两列,其他各行各列就都能平衡,也就是都能达到 ans = h + w - 4 ;但是在行数和列数的最小值小于 4 的时候,这种
()() “牺牲”的做法并不是最优的,此时通过暴力的方法去枚举找到(2,2),(2,4),(4,2),(4,4)的图案即可。
)()( 这种做法是怎么想出来的呢?请移步去大佬的博客吧.......
))))
![](/assets/blank.gif)
![](/assets/blank.gif)
1 #include <bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int t,a,b; 6 scanf("%d",&t); 7 while(t--) 8 { 9 scanf("%d%d",&a,&b); 10 if((a&1)&&(b&1)) 11 { 12 for(int i = 0; i < a; i++) 13 { 14 for(int j = 0; j < b; j++) 15 printf("("); 16 printf("\n"); 17 } 18 } 19 else if((a&1)&&!(b&1)) 20 { 21 for(int i = 0; i < a; i++) 22 { 23 for(int j = 0; j < b; j++) 24 if(j&1) printf(")"); 25 else printf("("); 26 printf("\n"); 27 } 28 } 29 else if(!(a&1)&&(b&1)) 30 { 31 for(int i = 0; i < a; i++) 32 { 33 for(int j = 0; j < b; j++) 34 if(i&1) printf(")"); 35 else printf("("); 36 printf("\n"); 37 } 38 } 39 else 40 { 41 /* if(a > b) 42 { 43 for(int i = 0; i < a; i++) 44 { 45 for(int j = 0; j < b; j++) 46 if(j&1) printf(")"); 47 else printf("("); 48 printf("\n"); 49 } 50 } 51 else 52 { 53 for(int i = 0; i < a; i++) 54 { 55 for(int j = 0; j < b; j++) 56 if(i&1) printf(")"); 57 else printf("("); 58 printf("\n"); 59 } 60 } 61 */ 62 if(a==2 && b==2) 63 { 64 puts("()"); 65 puts(")("); 66 continue; 67 } 68 if(b==2) 69 { 70 for(int i = 0; i < a; i++) 71 puts("()"); 72 continue; 73 } 74 if(a==2) 75 { 76 for(int i = 0; i < b; i++) 77 printf("("); 78 printf("\n"); 79 for(int i = 0; i < b; i++) 80 printf(")"); 81 printf("\n"); 82 continue; 83 } 84 if(a==4) 85 { 86 for(int i = 0; i < b; i++) 87 printf("("); 88 printf("\n"); 89 for(int i = 0; i < b; i++) 90 { 91 if(i < b/2)printf(")"); 92 else printf("("); 93 } 94 printf("\n"); 95 for(int i = 0; i < b; i++) 96 { 97 if(i < b/2)printf("("); 98 else printf(")"); 99 } 100 printf("\n"); 101 for(int i = 0; i < b; i++) 102 printf(")"); 103 printf("\n"); 104 continue; 105 } 106 if(b==4) 107 { 108 for(int i = 0; i < a; i++) 109 { 110 if(i < a/2) puts("()()"); 111 else puts("(())"); 112 } 113 continue; 114 } 115 for(int i = 0; i < a; i++) 116 { 117 for(int j = 0; j < b; j++) 118 { 119 if(i == 0|| j == 0) printf("("); 120 else if(i == a-1 || j == b-1) printf(")"); 121 else 122 { 123 if(j == 0) printf("("); 124 else if(j == b-1) printf(")"); 125 else 126 { 127 if(!(i&1)) 128 if(j&1) printf("("); 129 else printf(")"); 130 else 131 if(j&1) printf(")"); 132 else printf("("); 133 } 134 } 135 } 136 printf("\n"); 137 } 138 } 139 } 140 return 0; 141 }
View Code
转载于:https://www.cnblogs.com/Taskr212/p/9490290.html
HDU 6400(括号组合 ~)相关推荐
- python编程括号怎么打_在python中打印有效的括号组合
我试图用我自己的直觉打印python中所有有效的括号组合.它几乎可以工作,但只是它不打印几个组合.代码是这样的solution = "" def parentheses(n): g ...
- hdu 6400 Parentheses Matrix思维
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6400 这题有坑.. hw的最小值小于等于4是一种情况,否则是另外一种情况. 第一种情况可以 ((((( ...
- 输出所有的合法的括号组合
Implement an algorithm to print all valid (e. g. , properly opened and closed) combinations of n-pai ...
- java实现所有括号组合的遍历_括号正确嵌套问题的实现(Java)
最近比较忙,前几天实现的一些小算法没时间写到博客上面,今天有时间了,把它整理出来,跟大家分享. 废话少说,进入正题. 题目描述:给定一字符串,其内包含"()","{}&q ...
- hdu 4489(排列组合+DP)
有N个高矮不同的人,求高矮高矮高矮高矮......或者矮高矮高矮高......的排列方法一共有多少种. 假设第N个插入到队伍中的人比前N-1个人都要高,假设他插入的位置为 j ,那么j-1要比j-2矮 ...
- hdu 6400 Parentheses Matrix
题目:点击打开链接 题意: 给一个只含'('和')'的矩阵,只考虑从行和列上的括号序列,构造一个矩阵使得合法括号序列的总数最多. 分析:构造,分类讨论.首先奇数行或奇数列内是不存在合法括号序列的,所以 ...
- HDU 6400 Parentheses Matrix(构造)
题意:给你r,c求一个矩阵让它的行和列的匹配度最大,匹配就要一行一列全都匹配 每个位置只能是左括号或者右括号, "()"这算一个匹配,那么"(())",&quo ...
- hdu 1521 排列组合 多重集排列 + 指数生成函数
传送门 文章目录 题意: 思路: 题意: 思路: 显然是多重集排列数,我们考虑构造指数生成函数,让后模拟一下多项式乘法即可啦. 由于存在分数,所以直接用doubledoubledouble即可. // ...
- LeetCode22——Generate Parentheses(给定n对括号,然后看有多少正确的括号组合)
题目: 解法: The idea is intuitive. Use two integers to count the remaining left parenthesis (n) and the ...
最新文章
- DIV+CSS规范命名大全集合
- PL/SQL编程:用for循环算出5的阶乘
- 2021首期Nature封面:牛津大学ML算法实现10万高压非晶硅原子的模拟​ | AI日报
- 浅析网站流量出现异常情况应怎样解决?
- 从清明节到儿童节,打造一个童话城市
- 程序员面试题精选100题(22)-整数二进制表示中1的个数[算法]
- python词云代码简单_Python 简单实现标签词云
- Springboot对web应用的统一异常处理
- 菜鸟ING的博客终于开园了。
- android第三方launcher,目前Android平台最好的Launcher
- 【Golang 快速入门】高级语法:反射 + 并发
- Android开源库集合(UI效果)
- 巧妙的实现 CSS 斜线
- 65. magent 手动创建用户
- HTML5 css3 阴影效果
- GB35114视频流处理
- 全面的结构专业英语词汇 (三)
- Android EditText去掉下划线
- 冬奥、亚运会、世界杯,顶级运动员与头部品牌们的营销盛宴
- CSDN20181218博客黑板报