zoukankan      html  css  js  c++  java
  • 【BZOJ】3300: [USACO2011 Feb]Best Parenthesis(模拟)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3300

    这个细节太多QAQ

    只要将所有的括号'('匹配到下一个')'然后dfs即可

    简单吧,,,

    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <string>
    #include <iostream>
    #include <algorithm>
    #include <queue>
    using namespace std;
    #define rep(i, n) for(int i=0; i<(n); ++i)
    #define for1(i,a,n) for(int i=(a);i<=(n);++i)
    #define for2(i,a,n) for(int i=(a);i<(n);++i)
    #define for3(i,a,n) for(int i=(a);i>=(n);--i)
    #define for4(i,a,n) for(int i=(a);i>(n);--i)
    #define CC(i,a) memset(i,a,sizeof(i))
    #define read(a) a=getint()
    #define print(a) printf("%lld", a)
    #define dbg(x) cout << #x << " = " << x << endl
    #define printarr2(a, b, c) for1(i, 1, b) { for1(j, 1, c) cout << a[i][j]; cout << endl; }
    #define printarr1(a, b) for1(i, 1, b) cout << a[i] << ' '; cout << endl
    inline const int getint() { int r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }
    inline const int max(const int &a, const int &b) { return a>b?a:b; }
    inline const int min(const int &a, const int &b) { return a<b?a:b; }
    
    const int N=100005;
    const long long MD=12345678910;
    int n, q[N], top, inext[N];
    long long dfs(int l, int r) {
    	int rr=inext[l];
    	long long ret=0;
    	if(l!=rr-1) ret=(ret+((dfs(l+1, rr-1)<<1)%MD))%MD;
    	else if(l==rr-1) ret=(ret+1)%MD;
    	if(rr+1<=r) ret=(ret+(dfs(rr+1, r)%MD))%MD;
    	return ret;
    }
    
    int main() {
    	read(n);
    	for1(i, 1, n) {
    		int t=getint();
    		if(!t) q[++top]=i;
    		else inext[q[top--]]=i;
    	}
    	print(dfs(1, n));
    	return 0;
    }
    

    Description

    Recently, the cows have been competing with strings of balanced
    parentheses and comparing them with each other to see who has the
    best one.

    Such strings are scored as follows (all strings are balanced): the
    string "()" has score 1; if "A" has score s(A) then "(A)" has score
    2*s(A); and if "A" and "B" have scores s(A) and s(B), respectively,
    then "AB" has score s(A)+s(B). For example, s("(())()") =
    s("(())")+s("()") = 2*s("()")+1 = 2*1+1 = 3.

    Bessie wants to beat all of her fellow cows, so she needs to calculate
    the score of some strings. Given a string of balanced parentheses
    of length N (2 <= N <= 100,000), help Bessie compute its score.

    计算“平衡字符串”的分数,“平衡字符串”是指由相同数量的‘(’和‘)’组成,
    且以‘(’开头,以‘)’结尾的字符串。
    计算规则:
    字符串“()”的得分是1.
    如果,平衡字符串“A”的得分是是S(A),那么字符串“(A)”得分是2*S(A) ;
    如果,“A”,“B” 得分分别是S(A)和S(B),那么平衡字符串“AB”得分为S(A)+S(B)
    例如:s("(())()") =s("(())")+s("()") = 2*s("()")+1 = 2*1+1 = 3.

    Input

    * Line 1: A single integer: N

    * Lines 2..N + 1: Line i+1 will contain 1 integer: 0 if the ith
    character of the string is '(', and 1 if the ith character of
    the string is ')'
    第1行:N,平衡字符串长度
    第2至N+1行:Linei+1 整数0或1,0代表字符‘(’,1代表‘)’

    Output

    * Line 1: The score of the string. Since this number can get quite
    large, output the score modulo 12345678910.
    计算字符串得分,结果对12345678910取模

    Sample Input

    6
    0
    0
    1
    1
    0
    1
    INPUT DETAILS:

    This corresponds to the string "(())()".

    Sample Output


    3

    HINT

    Source

  • 相关阅读:
    【web charting】21个Javascript图表插件程序
    【IOC框架】分析与理解
    【待续】【HTML5】用Canvas标签创建第一张条线图
    【转】大型网站后台架构的演变
    初探Visual C# SQL CLR Database Project
    Js中 关于top、clientTop、scrollTop、offsetTop
    JS的正则表达式
    jquery的extend和fn.extend
    C/C++版数据结构之链表<三>
    C/C++ 一点笔记(2)
  • 原文地址:https://www.cnblogs.com/iwtwiioi/p/3981192.html
Copyright © 2011-2022 走看看