zoukankan      html  css  js  c++  java
  • [CF909D] Colorful Points

    Description

    给定一个串,每轮进行如下操作:如果一个字符的相邻字符中存在与它不同的,则这个字符被选中,选好所有字符后将这些字符同时删除,该轮结束。问操作多少次后无法再删除任何点。

    Solution

    将相同的连续段合并成一个结点,用链表维护

    每次遍历所有节点,头尾值 -1,中间值 -2,如果某个节点值 (le 0) 了就删除它

    (对 stl::list 还是不熟悉)

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    const int N = 1000005;
    
    struct Node
    {
        char c;
        int x;
    };
    
    list<Node> l;
    string s;
    int n;
    
    signed main()
    {
        ios::sync_with_stdio(false);
    
        cin>>s;
        int t_cnt=0;
        n=s.length();
        for(int i=0;i<n;i++)
        {
            ++t_cnt;
            if(i==n-1 || s[i]!=s[i+1])
            {
                l.push_back({s[i],t_cnt});
                t_cnt=0;
            }
        }
    
        int flag=1,last=0,ans=0;
        while(l.size()>1)
        {
            ++ans;
            for(auto it=l.begin();it!=l.end();it++)
            {
                it->x-=2;
            }
            l.begin()->x++;
            l.rbegin()->x++;
            for(auto it=l.begin();it!=l.end();it++)
            {
                if(it->x<=0) it=l.erase(it), it--;
            }
            for(auto it=l.begin();it!=l.end();it++)
            {
                auto t_it=it;
                t_it++;
                if(t_it==l.end()) break;
                while(t_it->c==it->c)
                {
                    it->x+=t_it->x;
                    t_it=l.erase(t_it);
                    if(t_it==l.end()) break;
                }
            }
            /*for(auto i:l) cout<<i.c<<"*"<<i.x<<" ";
            cout<<endl;*/
        }
        cout<<ans<<endl;
    }
    
    
  • 相关阅读:
    spoj LCS2
    spoj SUBLEX
    spoj NSUBSTR
    bzoj 2882: 工艺【SAM】
    poj 3294 Life Forms【SA+二分】
    poj 3415 Common Substrings【SA+单调栈】
    poj 2774 Long Long Message【SA】
    poj 2406 Power Strings【kmp】
    poj 1743 Musical Theme【二分+SA】
    hdu 3622 Bomb Game【二分+2-SAT+tarjan】
  • 原文地址:https://www.cnblogs.com/mollnn/p/13615411.html
Copyright © 2011-2022 走看看