Obtain The String CodeForces - 1295C

Posted accepting

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Obtain The String CodeForces - 1295C相关的知识,希望对你有一定的参考价值。

妈耶,,,被B题卡到哭,C题一发就过了。。。

字符串问题。首先用vector记录每个字符出现的位置,然后对字符串t的每个字符,用二分查找函数查找,注意用upper_bound查找,对于字符i,首先用变量pre记录第i-1个字符的位置。然后第i个字符的位置只能比

第i-1个字符位置大,所以用二分查一下,如果查不到,答案+1,然后重新查找一遍。若可以则直接更新一下前驱就行了。

#include<bits/stdc++.h>
using namespace std;
const int N=200;
vector<int >ve[N];
bool mark[N];
void solve()
{
    memset(mark,0,sizeof mark);
    for(char i=a;i<=z;i++){
        int c=i;
        ve[c].clear();
    }
    string s,t;
    cin>>s;
    cin>>t;
    int a=s.size();
    for(int i=0;i<a;i++){
        int c=s[i];
        ve[c].push_back(i);
        mark[c]=1;
    }

    int pre=-1;
    int b=t.size();
    for(int i=0;i<b;i++){
        int c=t[i];
        if(!mark[c]) {
            cout<<-1<<endl;
            return ;
        }
    }

    int ans=1;
    for(int i=0;i<b;i++){
        int x=t[i];
        if (upper_bound(ve[x].begin(),ve[x].end(),pre)==ve[x].end()){
            pre=*upper_bound(ve[x].begin(),ve[x].end(),-1);
            ans++;
        }
        else {
            pre=*upper_bound(ve[x].begin(),ve[x].end(),pre);
        }
    }
    cout<<ans<<endl;


    return ;
}


int main()
{
    int t;
    cin>>t;
    while(t--) solve();

    return 0;
}

 

以上是关于Obtain The String CodeForces - 1295C的主要内容,如果未能解决你的问题,请参考以下文章

C - Obtain The String 序列自动机

Codeforces 1295C - Obtain The String

Educational Codeforces Round 81 (Rated for Div. 2) C. Obtain The String

vmwareconverter 5.5 standalone 迁移 Unable to obtain hardware information for the selected machine

MATLAB读视频报错 Unable to initialize the video obtain properties (videoreader in Matlab)

解决mybatis generator警告Cannot obtain primary key information from the database, generated objects may