zoukankan      html  css  js  c++  java
  • HDU 6400 Parentheses Matrix(构造+分类处理)

    Problem Description

    A parentheses matrix is a matrix where every element is either '(' or ')'. We define the goodness of a parentheses matrix as the number of balanced rows (from left to right) and columns (from up to down). Note that:

    - an empty sequence is balanced;
    - if A is balanced, then (A) is also balanced;
    - if A and B are balanced, then AB is also balanced.

    For example, the following parentheses matrix is a 2×4 matrix with goodness 3, because the second row, the second column and the fourth column are balanced:

    )()(
    ()()

    Now, give you the width and the height of the matrix, please construct a parentheses matrix with maximum goodness.

    Input

    The first line of input is a single integer T (1≤T≤50), the number of test cases.

    Each test case is a single line of two integers h,w (1≤h,w≤200), the height and the width of the matrix, respectively.

    Output

    For each test case, display h lines, denoting the parentheses matrix you construct. Each line should contain exactly w characters, and each character should be either '(' or ')'. If multiple solutions exist, you may print any of them.

    Sample Input

    3 1 1 2 2 2 3

    Sample Output

    ( () )( ((( )))

    Source

    2018 Multi-University Training Contest 8

    题解:

    这个题当时做了2个小时。。。最后h>=6的构造都造出来了就是没注意h=4时要分类讨论。。。难受ε=(´ο`*)))唉

    代码:

    #include <cstdio>
    #include <algorithm>
    
    using namespace std;
    
    char board[205][205];
    
    int main(){
        
    	int T;
    	scanf("%d",&T);
    	while(T--){
    		bool flag = false;
    		int a,b;
    		scanf("%d %d",&a,&b);
    		if(b < a){
    			swap(a,b);
    			flag = true;
    		} 
    		if(a&1){
    		    for(int i=0 ; i<a ; ++i)
    		        for(int j=0 ; j<b ; ++j){
    		            if(j&1)board[i][j] = ')';
    		            else board[i][j] = '(';
    		        }
    		}
    		else if(b&1){
    		    for(int j=0 ; j<b ; ++j)
    		        for(int i=0 ; i<a ; ++i){
    		            if(i&1)board[i][j] = ')';
    		            else board[i][j] = '(';
    		        }
    		}
    		else if(a == 2){
    			for(int j=0 ; j<b ; ++j){
    				board[0][j] = '(';
    				board[1][j] = ')';
    			}
    		}
    		else if(a == 4){
    			for(int j=0 ; j<b ; ++j){
    				board[0][j] = '(';
    				board[a-1][j] = ')';
    			}
    			for(int i=1 ; i<a-1 ; ++i){
    				if(i&1){
    					for(int j=0 ; j<b/2 ; ++j)board[i][j] = ')';
    					for(int j=b/2 ; j<b ; ++j)board[i][j] = '(';
    				}
    				else {
    					for(int j=0 ; j<b/2 ; ++j)board[i][j] = '(';
    					for(int j=b/2 ; j<b ; ++j)board[i][j] = ')';
    				}
    			}
    		}
    		else {
    			for(int j=0 ; j<b ; ++j){
    				board[0][j] = '(';
    				board[a-1][j] = ')';
    				if(j&1)board[1][j] = ')';
    				else board[1][j] = '(';
    			}
    			board[1][0] = '(';
    			board[1][b-1] = ')';
    			for(int i=2 ; i<a-1 ; ++i){
    				board[i][0] = '(';
    				board[i][b-1] = ')';
    				for(int j=1 ; j<b-1 ; ++j){
    					if(board[i-1][j] == '(')board[i][j] = ')';
    					else board[i][j] = '(';
    				}	
    			}
    		}
    		if(flag){
    			for(int j=0 ; j<b ; ++j){
    		        for(int i=0 ; i<a ; ++i)printf("%c",board[i][j]);
    		        printf("
    ");
    		    }
    		}
    		else {
    			for(int i=0 ; i<a ; ++i){
    		        for(int j=0 ; j<b ; ++j)printf("%c",board[i][j]);
    		        printf("
    ");
    		    }
    		}
    	}
        
        return 0;
    }
  • 相关阅读:
    ASP.NET MVC中权限控制的简单实现
    HDU1004——Let the Balloon Rise
    如何使用飞秋FeiQ实现两电脑通信(或传输文件)
    vb.net 鼠标控制
    ireport制作报表pageheader只在第一页出现的解决办法
    Keycode对照表
    leetcode第一刷_Binary Tree Zigzag Level Order Traversal
    换硬币问题
    STM32 寄存器库和固件库
    java网络编程(2)InetAddress 类及udp协议
  • 原文地址:https://www.cnblogs.com/vocaloid01/p/9513994.html
Copyright © 2011-2022 走看看