Aizu

来源:互联网 发布:弱水三千网络歌手伴奏 编辑:程序博客网 时间:2024/05/21 09:31

题意:给你一个数值A,让你给出一个括号串,到“平衡括号”的最小“距离”为A。

思路:找规律。参考自here

))((      A = 3

)))(((   A = 6

))))(((( A = 10

n对括号所能达到的最大值A = 1+2+ ……+n = n*(n+1)/2

这样就找出了括号的对数,然后再根据每次括号的移动推出一般规律

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int main(){    int a;    cin>>a;    int n = 0;    while(n*(n+1)/2 < a)//找到这个数属于完整括号的对数        n++;    int cnt = n*(n+1)/2 - a;//距离变换到那个最长移动的括号的“距离”    for(int i = 0;i < n-cnt;i++)        printf(")");    printf("(");    for(int i = n-cnt+1;i < n+1;i++)        printf(")");    for(int i = n+1;i < n*2;i++)        printf("(");    printf("\n");    return 0;}


0 0
原创粉丝点击