題意很簡單,給一個數n 以及一個字符串str,區間【i,i+n-1】 為一個新的字符串,i 屬於【0,strlen(str)】如果新的字符串出現過ans++,例如:acmacm n=3,那麼 子串為acm cma mac acm ,只有acm出現過
求ans;
ACM_王亞龍
第一次看到10W以為會超時呢 然而並沒有....
就是分割字符串,然後把分割的字符串存貯到結構體中(有點丟人了。只會用結構體的字符串排序,qsort的忘記了...)
然後對結構體的字符串進行排序,如果有兩個字符串相同ans++;
代碼:
#include
#include
#include
using namespace std;
#define num 100005
char str[num],temp[11];
struct node
{
char dir[11];
}c[num];
bool cmp(node x,node y)//對結構體的字符串排序
{
if(strcmp(x.dir,y.dir)<0) return true;
return false;
}
int main()
{
int test,n,i,t,len;
scanf("%d",&test);
while(test--)
{
scanf("%d %s",&n,str);
len=strlen(str);
i=0;
while(i+n<=len)//分割字符串並存貯字符串
{
t=0;
for(int q=i;q
-
輸入
-
LINE 1: T組數據(T<10)
LINE 2: n ,n <= 10,且小於strlen(str);
LINE 3:str
str 僅包含英文小寫字母 ,切長度小於10w
-
輸出
-
求 ans
-
樣例輸入
-
2
2
aaaaaaa
3
acmacm
-
樣例輸出
-
5
1
-
上傳者