• 括号(构造)


    链接:https://ac.nowcoder.com/acm/contest/9981/B
    来源:牛客网

    请你构造一个非空的括号字符串,包含正好 k 个不同合法括号对。
    所谓括号字符串,是指由'('和')'这两种字符构成的字符串。
    要求构造的字符串长度不超过100000

    输入描述:

    一个整数 kkk。
    0≤k≤1e9

    输出描述:

    一个仅包含左右括号字符串,其中有 k 个合法的括号对。如果有多种构造方法,输出任意一种合法方案即可。
    示例1

    输入

    复制
    3

    输出

    复制
    ()()

    说明

    假设字符串数组下标从 1 开始,则 (1,2), (1,4), (3,4) 共计 3 个合法括号对
    当然,"()))" 也是一种合法的构造
    示例2

    输入

    复制
    4

    输出

    复制
    (())

    说明

    假设字符串数组下标从 1 开始,则 (1,3), (1,4), (2,3), (2,4) 共计 4 个合法括号对
    另外,合法的构造还有"())()"、"()(()(" 等等。。
    示例3

    输入

    复制
    9

    输出

    复制 
    ()))))))))

    说明

    合法的还可以是:
    ())())()
    ((()))
    )()()())(
    等等等。。有非常多种合法构造,输出任意即可。
     
     
    做这个题的时候先考虑一下,如果让你构造一个10个合法括号用长度为7的字符串,的话你怎么构造?
    2*5是一个很好的选择,( ( ) ) ) ) )但是如果构造11个合法括号的,那就是再最右边的括号在给他加一个( ( ) ) ) ) ( ),
    按照这样一个思路验证一下
    1e9/35000==28571   1e9%35000假设最大时35000,两个相加不超过100000,所以可行
    #include<iostream>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    const int maxn=1e6+100;
    const int mod=998244353;
    int main(){
        int k;
        cin>>k;
        if(k+1<=100000){
            printf("(");
            for(int i=1;i<=k;i++){
                printf(")");
            }
        } 
        else{
            //50000
            int p=k/35000;
            int z=k%35000;
            for(int i=1;i<=35000;i++){
                printf("(");
            } 
            for(int i=1;i<=p-1;i++){
                printf(")");
            }
            for(int i=1;i<=z;i++){
                printf("(");
            }
            printf(")");
        }
    }
     
  • 相关阅读:
    用自己的话描述wcf中的传输安全与消息安全的区别(一)
    web服务器( nginx )及请求代理
    windows系统安装
    邮箱使用
    常见dos命令总结
    前端技术碰到的陌生单词
    前端工作思考
    table标签详解
    PC 端响应式布局
    HTML标签嵌套规则
  • 原文地址:https://www.cnblogs.com/lipu123/p/14373116.html
Copyright © 2020-2023  润新知