zoukankan      html  css  js  c++  java
  • codeforces 777 D

    从前往后  去掉一些后缀 

    使得大家成字典序排列  去掉最少 

    求完成后序列  傻逼了错了好几次   最中要是string

    后面是上来  第一个词 如果大于后面的  那么前面都是#

    然后从后面贪心一下  

    #include <iostream>
    #include<string.h>
    #include<stdio.h>
    #include<algorithm>
    #include<string>
    using namespace std ;
    
    #define LL long long
    #define MAXN 500010
    string z[MAXN];
    int to[MAXN];
    
    int main()
    {
        int n;
        scanf("%d",&n);
        for(int i = 0; i < n; i++)
            cin>>z[i];
        int ok=-1;
    
        for(int i=n-1;i>=1;i--)
        {
            if(z[i][1]<z[i-1][1])
            {
                ok=i-1;
                break;
            }
        }
        for(int i = ok; i >= 0; i--)   //< to[i]
            to[i]=1;
        //printf("%d
    ",ok);
        to[n-1]=z[n-1].size();
        for(int i=n-2;i>=ok+1;i--)
        {
            if(z[i][1]<z[i+1][1])
            {
                to[i]=z[i].size();
    
            }
            else
            {
                int ok1=0,ok2=0;
                int a=z[i].size();
                int len=min(a,to[i+1]);
                for(int j = 2; j < len; j++)
                {
                    if(z[i][j]>z[i+1][j])
                    {
                        ok1=j;
                        break;
                    }
                    else if(z[i][j]<z[i+1][j])
                    {
                        ok2=1;
                        break;
                    }
                    else
                        ok2=2;
                }
                //printf("%d %d
    ",ok1,ok2);
                if(ok1!=0)
                {
                    to[i]=ok1;
                }
                else if(ok2==1)
                    to[i]=z[i].size();
                else
                {
                    //printf("%d %d
    ",z[i].size(),z[i+1].size());
                    if(z[i].size()>to[i+1])
                        to[i]=len;
                    else
                        to[i]=z[i].size();
                }
            }
        }
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<to[i];j++)
                printf("%c",z[i][j]);
            printf("
    ");
        }
    
        return 0;
    }
  • 相关阅读:
    TCP的三次握手与四次挥手理解及面试题(很全面)
    python解释器锁的理解
    Flask的基本使用、四剑客和配置文件
    Django cache缓存
    xadmin后台管理
    cookies与session
    Java stream流
    Java IO流
    springboot配置文件加载顺序与一些常用配置
    OAuth2.0开放授权
  • 原文地址:https://www.cnblogs.com/cherryMJY/p/6481327.html
Copyright © 2011-2022 走看看