zoukankan      html  css  js  c++  java
  • Obtain The String CodeForces

    妈耶,,,被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;
    }
  • 相关阅读:
    JavaScript 消息框
    DOM事件
    修改输入框placeholder文字默认颜色-webkit-input-placeholder
    css—文字渐变色
    css—各浏览器下的背景色渐变
    $.ajax()方法详解
    使用meta实现页面的定时刷新或跳转
    python的连接mysql的安装
    django安装
    速查
  • 原文地址:https://www.cnblogs.com/Accepting/p/12244130.html
Copyright © 2011-2022 走看看