2021牛客暑期多校训练营10补题记录

Browser Games

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+7; 
int n,m,a[N],ans[N];
string s[N];
bool cmp(int a,int b){
    return s[a]<s[b];
}
void dfs(int l,int r,int x,int k)
{
    if(l==r)return;
    int ma=0;
    for(int i=l,j=l;i<=r;i++)
    {
        ma=max(ma,a[i]);
        if(i==r||s[a[i]][k]!=s[a[i+1]][k])
        {
        ans[ma]++;
        ans[x]--;
        dfs(j,i,ma,k+1);
        j=i+1;
        ma=0;    
        }
    }
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    cin>>s[i],a[i]=i;
    if(n==1){
        printf("1\n");
        return 0;
    }
    sort(a+1,a+n+1,cmp);
    dfs(1,n,n+1,0);
    for(int i=1;i<=n;i++)
    ans[i]+=ans[i-1],printf("%d\n",ans[i]);
} 
全部评论

相关推荐

我是小红是我:学校换成中南
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务