解题思路:

        1.输入s
        2.用set保存所有长度为8的s的子串 //方便判断

        3.输入n,循环n次:

            1).输入密码串s

            2).排序s,方便用库函数遍历所有排列组合

            3).遍历时,如果st中有这个字符串则ans++

        4.输出ans
注意事项:
        
参考代码:

#include<bits/stdc++.h>
using namespace std;

string s;
set<string> st;
int main(){
    cin>>s;
    int n=s.length();
    for(int i=0;i+7<n;i++)st.insert(s.substr(i,8));//set长度为8的子串
    cin>>n;
    int ans=0;
    while(n--){
    	cin>>s;
    	sort(s.begin(),s.end());
    	do{
    		if(st.count(s))ans++;
    	}while(next_permutation(s.begin(),s.end()));
    }
    cout<<ans<<endl;
}


点赞(1)
 

0.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 3 条评论

我不是张玉想 4年前 回复TA
蛮高级的,但耗时还是比普通做法高那么一丢丢,哈哈哈,蛮好的
木子CoCo~ 4年前 回复TA
很好利用了next_permutation()函数的用法
滑稽 5年前 回复TA
这个牛批