南阳oj 求次数 题目1112

来源:互联网 发布:php商城项目描述 编辑:程序博客网 时间:2024/05/29 14:50

/*
求次数
时间限制: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样例输入2
2
aaaaaaa
3
acmacm
样例输出5
1
大概题意是给一个字符串  给一个数N  按照N来分割字符串   得到新的字符串看看在后边有没有出现  记录出现的次数
*/
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
using namespace std; 
const   int maxn=100010; 
char str[maxn][20],s[maxn];//二维数组模拟 
int cmp(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';
            }ans=0; 
            qsort(str,i,sizeof(str[0]),cmp); 
            for(j=1;j<i;++j){ 
                if(strcmp(str[j],str[j-1])==0) 
                ans++; 
            } 
            printf("%d\n",ans); 
        } 
    } 
    return 0; 

0 0