频道栏目
首页 > 考试 > 其他 > 正文

nyoj 1112 求次数

2016-11-23 09:23:00      个评论    来源:人面桃花  
收藏   我要投稿

http://acm.nyist.net/JudgeOnline/problem.php?pid=1112
求次数
时间限制: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
题目理解 :今天上午刚学的substr函数就被用到了,其实很简单,利用set,判断是不是重复了,然后判断重复的方法是数组的大小是不是改变,如果改变了,说明就是有新元素了。但是最后要用st.clear()把set数组清空。

    #include   
    #include   
    #include   
    #include   
    using namespace std;  
    set st;  
    int main() 
    {  
        int t;  
        scanf("%d",&t);  
            while(t--)  
            {  
                int ans = 0;  
                string s;  
                int n;  
                scanf("%d",&n);  
                cin >> s;  
                int len = st.size();  
                for(int i = 0; i <= s.length() - n; ++i) //求长度的 
                {  
                    string te = s.substr(i,n);  //截取函数
                    st.insert(te);  //set判断是否重复
                    if(len == st.size())  
                        ans++;  
                    else len = st.size();  
                }  
                printf("%d\n",ans);  
                st.clear();  //清空set



            }  
    }  
相关TAG标签 nyoj
上一篇:Codeforces Round #380 (Div. 2) B. Spotlights (模拟)
下一篇:HDU1032 The 3n + 1 problem
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站