Codeforces 918C - The Monster

918C - The Monster

思路1:

右键在新窗口打开图片

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    string s;
    cin>>s;
    int ans=0;
    for(int i=0;i<s.size();i++){
        int score=0,q=0;
        for(int j=i;j<s.size();j++){
            if(s[j]==‘(‘)score++;
            else if(s[j]==‘)‘)score--;
            else q++;
            while(q>0&&q>score)q--,score++;
            if(score<0)break;
            if((j-i+1)%2==0&&q>=score)ans++;
        }
    }
    cout<<ans<<endl;
    return 0;
} 

思路2:

结论:

证明见codeforces.com/blog/entry/57420

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))

const int N=5e3+5;
int cnt[N][N];
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    string s;
    cin>>s;
    int ans=0;
    for(int i=0;i<s.size();i++){
        int l=0,r=0;
        for(int j=i;j<s.size();j++){
            if(s[j]==‘(‘||s[j]==‘?‘)l++;
            else r++;
            if(r>l)break;
            cnt[i][j]++;
        }
    }
    for(int i=0;i<s.size();i++){
        int l=0,r=0;
        for(int j=i;j>=0;j--){
            if(s[j]==‘)‘||s[j]==‘?‘)r++;
            else l++;
            if(l>r)break;
            cnt[j][i]++;
        }
    }
    for(int i=0;i<s.size();i++){
        for(int j=i;j<s.size();j++){
            if((j-i+1)%2==0&&cnt[i][j]==2)ans++;
        }
    }
    cout<<ans<<endl;
    return 0;
} 

原文地址:https://www.cnblogs.com/widsom/p/8387137.html

时间: 2024-10-11 19:54:52

Codeforces 918C - The Monster的相关文章

CodeForces 592B The Monster and the Squirrel

规律题,多画几个就能找到规律了. #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; long long a[60000]; long long C; int main() { a[3]=1; C=3; for(int i=4;i<=54321;i++) { a[i]=a[i-1]+C; C=C+2; } int n; w

Codeforces Round #459 (Div. 2)题解

补题 codeforces 918C 题意 给定一个含有通配符?和()的字符串,问有多少子串是括号匹配的 解题思路 首先考虑不用栈求括号匹配的方法: bool solve(char* s) { int top=0; for (int i=0;i<strlen(s);i++) { if(s[i]=='(') top++; else top--; if(top<0) return false; } return top==0; } 由于在使用栈的括号匹配算法中,栈内是不存在)的,所以不难证明这个算

CodeForces 487A Fight the Monster

1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int judge(int hy,int ay,int dy,int hm,int am,int dm)//计算特定的攻击与防御之下,需要加多少hp 5 { 6 if(am <= dy) 7 return 0; 8 int d1 = am - dy; 9 //cout<<" d1 = "<<d1<&

【Codeforces Round #459 (Div. 2) C】The Monster

[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 左括号看成1 右括号看成-1 设置l,r表示前i个数的和的上下界 遇到 左括号 l和r同时加1 遇到右括号 同时减1 遇到问号 因为问号可以为1或-1所以l减1而r加1 如果在某个时刻r小于0了 就说明再也不能继续了 因为说明左括号和问号比右括号来得少了 如果l<0则把l置为0,因为不允许和出现<0的情况 否则如果l等于0就说明有一种方法能让前i个数的和为0 当然当前枚举的序列长度要为偶数 [代码] #include <

Codeforces Round #459 (Div. 2)The Monster[匹配问题]

题意 给一个序列,包含(,),?,?可以被当做(或者),问你这个序列有多少合法的子序列. 分析 n^2枚举每一个子序列,暂时将每个?都当做右括号,在枚举右端点的时候同时记录两个信息:当前左括号多余多少个(top),已经将多少个?变成了右括号(cnt). 如果当前是(,top++. 如果当前是),top--. 如果当前是?,top--,cnt++; 如果top<0,我们需要判断一下当前还有没有之前被当做右括号的?,如果有的话,我们将其变为左括号,如果没有的话,意味着可以跳出循环了,之后都不会再合法

Educational Codeforces Round 76 (Rated for Div. 2) - D. Yet Another Monster Killing Problem(贪心)

题意:有$n$个怪物,每个怪物有一个能力值$a[i]$,你现在有$m$个英雄,每个英雄有两个属性:$p[i]$表示这个英雄的能力值,$s[i]$表示这个英雄的耐力值,即一天内最多能消灭$s[i]$个怪物,每一天你可以选择一个英雄去消灭怪物,并且你只能一个一个的消灭,不能改变顺序,当一个英雄的能力值大于等于怪物的能力值并且他这一天内消灭的怪物数小于$s[i]$时,他就会继续去消灭下一个怪物,直到消灭的怪物数量等于$s[i]$或者这个英雄的能力值小于当前怪物的能力值,结束这一天,进入第二天,一个英雄

Codeforces Zepto Code Rush 2014 Feed with Candy 贪心

A. Feed with Candy time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output The hero of the Cut the Rope game is a little monster named Om Nom. He loves candies. And what a coincidence! He also is

Codeforces ZeptoLab Code Rush 2015

比赛链接:http://codeforces.com/contest/526/ A. King of Thieves time limit per test:1 second memory limit per test:256 megabytes In this problem you will meet the simplified model of game King of Thieves. In a new ZeptoLab game called "King of Thieves&quo

Codeforces Round #278 (Div. 2) c

/**  * @brief Codeforces Round #278 (Div. 2) c  * @file c.c  * @author 面码  * @created 2014/11/25 14:15  * @edited  2014/11/25 14:15  * @type brute  *  */ #include <stdio.h> #define max(a, b)  ((a) > (b) ? (a) : (b)) #define min(a, b)  ((a) > (