1.题目:
D的小L
时间限制:4000 ms | 内存限制:65535 KB
难度:2
描述
一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡匡生气,这时小L给匡匡出了个题目想难倒匡匡(小L很D吧),有一个数n(0<n<10),写出1到n的全排列,这时匡匡有点囧了,,,聪明的你能帮匡匡解围吗?
输入
第一行输入一个数N(0<N<10),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个整数x(0<x<10)
输出
按特定顺序输出所有组合。
特定顺序:每一个组合中的值从小到大排列,组合之间按字典序排列。
样例输入
2
2
3
样例输出
12
21
123
132
213
231
312
321
代码:
#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 10;
int main(){
// freopen("a.txt", "r", stdin);
int n, x;
int l[maxn];
scanf("%d", &n);
while(n--){
scanf("%d", &x);
for(int i = 0; i < x; ++i){
l[i] = i + 1;
}
do{
for(int i = 0; i < x; ++i){
printf("%d", l[i]);
}
printf("\n");
}while(next_permutation(l, l + x));
}
return 0;
}
next_permutation函数将按字母表顺序生成给定序列的下一个较大的排列,直到整个序列为降序为止。prev_permutation函数与之相反,是生成给定序列的上一个较小的排列。
进行全排列前,必须把数组元素按小到大排序
next_permutation()函数第一个参数:数组的起始位置(即数组名)
第二个参数:数组的结束位置(即数组名+数组长度)。
2.求次数(STL map, STL string)
时间限制: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
上传者
ACM_王亚龙
链接:
http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=1112
#include <iostream>
#include <fstream>
#include <cstring>
#include <string>
#include <map>
using namespace std;
//map<string, int> mp;
int main(){
// freopen("a.txt", "r", stdin);
int t, n;
int len, ans;
string s, ss;
cin >> t;
while(t--){
map<string, int> mp;
ans = 0;
cin >> n >> s;
len = s.length();
for(int i = 0; i <= len - n; ++i){
ss = s.substr(i, n);
if(mp[ss]) ans++;
else mp[ss] = 1;