20171108 模拟题 T1

T1

为什么要写这个题呢?

我只是想说:链表也能做!!

QAQAQ

可是……细节什么的考场写的好晕……

(其实我不想解释代码了QAQAQ

Codes:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>

using namespace std;
const int N = 100000 + 10;
char s[N];
int ans,ans1,ans2;
int pre[N],nxt[N];
int main(){
    //freopen("shower.in","r",stdin);
    //freopen("shower.out","w",stdout);
    scanf("%s",s + 1);
    int len = strlen(s + 1);
    for(int i = 1;i <= len;++ i){
        pre[i] = i - 1;
        nxt[i - 1] = i;
    }
    nxt[len] = len + 1;
    pre[len + 1] = len;
    if(s[1] != ‘(‘) ans ++;
    if(s[len] != ‘)‘) ans ++;
    s[1] = ‘(‘,s[len] = ‘)‘;
    for(int i = 1;i < len;i = nxt[i]){
        if(pre[i] == 0 && s[i] == ‘)‘){
            ans ++;
            s[i] = ‘(‘;
        }
        if(nxt[i] == len + 1 && s[i] == ‘(‘){
            ans ++;
            s[i] = ‘)‘;
        }
        if(s[nxt[i]] == ‘)‘ && s[i] == ‘(‘){
            nxt[pre[i]] = nxt[nxt[i]];
            pre[nxt[nxt[i]]] = pre[i];
        }
        if(s[pre[i]] == ‘(‘ && s[i] == ‘)‘){
            nxt[pre[pre[i]]] = nxt[i];
            pre[nxt[i]] = pre[pre[i]];
        }
    }
    int sum = 0;
    for(int i = 0;i < len + 1;i = nxt[i]){
        if(s[nxt[i]] == ‘(‘){
             sum ++;
        }
    }
    cout << ans + (sum / 2) << ‘\n‘;
    return 0;
}
时间: 2024-08-01 17:10:09

20171108 模拟题 T1的相关文章

Achen毒瘤模拟题T1——数数(counting)

题目大意:给出一个区间,并给定应两两相等的数位的数对,求满足的数的个数. 范围:1e5 做法: 先用并查集,将互相相等的树连成一块,统计块的个数,从高位到低位扫描,然后容斥即可 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<set> #include<queue> #inc

HDU 4930 Fighting the Landlords(扯淡模拟题)

Fighting the Landlords 大意: 斗地主....   分别给出两把手牌,肯定都合法.每张牌大小顺序是Y (i.e. colored Joker) > X (i.e. Black & White Joker) > 2 > A (Ace) > K (King) > Q (Queen) > J (Jack) > T (10) > 9 > 8 > 7 > 6 > 5 > 4 > 3. 给你8种组合:1.

noip模拟题题解集

最近做模拟题看到一些好的题及题解. 升格思想: 核电站问题 一个核电站有N个放核物质的坑,坑排列在一条直线上.如果连续M个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质. 任务:对于给定的N和M,求不发生爆炸的放置核物质的方案总数 输入:输入文件只一行,两个正整数N,M( 1<N<50,2≤M≤5) 输出:输出文件只有一个正整数S,表示方案总数. 运用升格思想.设N个坑不会发生爆炸的方案数是f[N],那么我们假设N以前的坑的方案 都已知了,那么我们只需要考虑第N个坑如何放即可(顺

xjoi2016模拟题1

星期天下午被某个sb叫去做xjoi模拟题. 发现自己好弱.STL不熟. T1 一开始是想把每一列的最大平均值算出来,然后每一列相加在算平均值,然后发现这是错误的想法,于是华丽丽的10分. 正解:二分枚举最大平均值,判断是否合法. #include<cstdio>#include<cstdlib>#include<cstring>#define max(x,y) (x>y?x:y)const int N=9001000;long long sum[N];int n,

OCJP(1Z0-851) 模拟题分析(八)

Exam : 1Z0-851 Java Standard Edition 6 Programmer Certified Professional Exam 以下分析全都是我自己分析或者参考网上的,定有疏漏,还请大家对我的分析提出质疑. QUESTION 235Given:5. class Payload {6. private int weight;7. public Payload (int w) { weight = w; }8. public void setWeight(int w) {

OCJP(1Z0-851) 模拟题分析(三)

Exam : 1Z0-851 Java Standard Edition 6 Programmer Certified Professional Exam 以下分析全都是我自己分析或者参考网上的,定有疏漏,还请大家对我的分析提出质疑. QUESTION 61Given:1. public class TestString1 {2. public static void main(String[] args) { 3. String str = "420";4. str += 42;5.

HDU 4028 The time of a day STL 模拟题

暴力出奇迹.. #include<stdio.h> #include<iostream> #include<algorithm> #include<vector> #include<cmath> #include<queue> #include<set> #include<map> using namespace std; #define ll __int64 #define N 42 ll n,m,ans;

cf428c 模拟题

这题说的是给了 n个数然后又 k次 的交换任意位置的 数字的机会  计算最长的连续子序列的和 这要撸  模拟整个 过程 并不能就是算最长的递增序列 如果只是 找最长的 和序列的 话 会存在 很多问题 在替换的时候 每一个决策 都影响着 下一个决策  这样 存在谁与谁替换 这样的状态有 200!种    那就枚举每个区间这样就可以使得 我们所用替换方法得当  因为在替换中我们进行替换是对不同区间的 操作 比如 在替换序列之内的 数字的时候 其实操作的就是不同的区间 与外面的序列进行替换的时候 操作

TOJ1290 Poker Hands 模拟题

寒假期间抽空做的一道模拟题 难度不算大,把每种牌型分开处理,可以合并的步骤考虑合并. 代码比较丑陋,首次尝试Sport Programming的风格,结果搞了个不伦不类(手动笑哭) 1 #include <algorithm> 2 #include <bitset> 3 #include <cctype> 4 #include <complex> 5 #include <cstdio> 6 #include <cstring> 7 #