1. 程式人生 > >BUCTOJ邀請賽20180814-D: String

BUCTOJ邀請賽20180814-D: String

傳送門:http://116.196.97.99/problem.php?cid=1003&pid=3

問題 D: String

時間限制: 1 Sec  記憶體限制: 128 MB



 

 

樣例輸入

3
abababa
1
abcde
4
abababa
5
abababa

 

樣例輸出

2
5
1
0

思路:二分答案,用map雜湊字串來統計字串出現次數,時間複雜度是n*(logn)^2.

吐槽:一直wa在50%,getline改成cin就ac了……

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<string>
#include<iostream>
#include<map>
#include<vector>
#include<set>
#include<queue>
using namespace std;

int k,len;
string s;
 
int judge(int x)
{
    map<string,int>mp;
    string s1;
    for(int i=0;i<x;i++)
    {
        s1+=s[i];
    }
    mp[s1]++;
    if(mp[s1]>=k)
        return 1;
    for(int i=x;i<len;i++)
    {
        s1.erase(s1.begin());
        s1+=s[i];
        mp[s1]++;
        if(mp[s1]>=k)
            return 1;
    }
    return 0;
}
 
int main()
{
    while(cin>>k)
    {
        cin>>s;
        len=s.size();
        int l=1,r=len/k;
        int ans=0;
        while(l<=r)
        {
            int mid=(l+r)/2;
            if(judge(mid))
            {
                ans=mid;
                l=mid+1;
            }
            else
            {
                r=mid-1;
            }
        }
        cout<<ans<<endl;
    }
}