寒假ACM做题总结

今天主要是学习了全排列,深度优先搜索,二分的使用。

1.

给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。 我们假设对于小写字母有'a' < 'b' < ... < 'y' < 'z',而且给定的字符串中的字母已经按照从小到大的顺序排列。

Input

输入只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。

Output

输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义:

已知S = s1s2...sk , T = t1t2...tk,则S < T 等价于,存在p (1 <= p <= k),使得
s1 = t1, s2 = t2, ..., sp - 1 = tp - 1, sp < tp成立。

Sample Input

abc

Sample Output

abc
acb
bac
bca
cab
cba

思路:主要是使用全排列,用递归函数来完成。

代码:

#include<stdio.h>
#include<string.h>
int book[7],n;
char a[7],b[7];
void dsf(int s)
{
	int i;
	if(s==n)
	{
	a[s]='\0';
	printf("%s\n",b);	
	}
  for(i=0;i<n;i++)
	if(book[i]==0)
	{
		b[s]=a[i];
		book[i]=1;
		dsf(s+1);//调用自己
		book[i]=0;
		
	}
 } 
 int main()
 {
 	scanf("%s",a);
 	n=strlen(a);
 	dsf(0);
 	getchar();
 	return 0;
 }

2.

蒜头君手上有个长度为 n的数组 A。由于数组实在太大了,所以蒜头君也不知道数组里面有什么数字,所以蒜头君会经常询问在数组 A 中,等于 x 的数字有多少个?

输入格式

第一行输入两个整数 n 和 m,分别表示数组的长度和查询的次数。

接下来一行有 n个整数 ai​。

接下来 m 行,每行有 1 个整数 x,表示蒜头君询问的整数。

输出格式

对于每次查询,输出一个整数,表示数组 A 中有多少个 x。

数据范围

1 \le n, m \le 10^5, 0 \le x \le 10^61≤n,m≤105,0≤x≤106。

Sample Input

10 5
1 1 1 2 3 5 5 7 8 9
0
1
4
9
10

Sample Output

0
3
0
1
0<
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值