nyoj 求次数

来源:互联网 发布:化学化工物性数据手册 编辑:程序博客网 时间:2024/04/29 20:18

求次数

时间限制:1000 ms  |  内存限制:65535 KB
难度:2
描述

题意很简单,给一个数n 以及一个字符串str,区间【i,i+n-1】 为一个新的字符串,i 属于【0,strlen(str)】如果新的字符串出现过ans++,例如:acmacm n=3,那么 子串为acm cma mac acm ,只有acm出现过

求ans;

输入
LINE 1: T组数据(T<10)
LINE 2: n ,n <= 10,且小于strlen(str);
LINE 3:str
str 仅包含英文小写字母 ,切长度小于10w
输出
求 ans
样例输入
22aaaaaaa3acmacm
样例输出
51
 #include<cstdio>#include<cstdlib>#include<cstring>using namespace std;constint maxn=100010;char str[maxn][20],s[maxn];intcmp_string(const void* _a,const void* _b){char* a=(char*)_a;char* b=(char*)_b;return strcmp(a,b);}int main(){int t,l,n,ans,i,j,e;while(scanf("%d",&t)==1){while(t--){scanf("%d",&n);getchar();gets(s);l=strlen(s);for(i=0;i<l-n+1;++i){e=i; for(j=0;j<n;++j){str[i][j]=s[e++];}str[i][j]='\0';//也可使用memset清空}ans=0;qsort(str,i,sizeof(str[0]),cmp_string);for(j=1;j<i;++j){if(strcmp(str[j],str[j-1])==0)ans++;}printf("%d\n",ans);}}return 0;}


0 0
原创粉丝点击