# #######################

## A. 全排列

# 全排列

给出一个正整数n,和一个长度为n的排列A，求这个排列的全排列（按从大到小的顺序输出）。

```input1
5
1 2 3 4 5
```

```output1
5 4 3 2 1
5 4 3 1 2
5 4 2 3 1
5 4 2 1 3
5 4 1 3 2
5 4 1 2 3
5 3 4 2 1
5 3 4 1 2
5 3 2 4 1
5 3 2 1 4
5 3 1 4 2
5 3 1 2 4
5 2 4 3 1
5 2 4 1 3
5 2 3 4 1
5 2 3 1 4
5 2 1 4 3
5 2 1 3 4
5 1 4 3 2
5 1 4 2 3
5 1 3 4 2
5 1 3 2 4
5 1 2 4 3
5 1 2 3 4
4 5 3 2 1
4 5 3 1 2
4 5 2 3 1
4 5 2 1 3
4 5 1 3 2
4 5 1 2 3
4 3 5 2 1
4 3 5 1 2
4 3 2 5 1
4 3 2 1 5
4 3 1 5 2
4 3 1 2 5
4 2 5 3 1
4 2 5 1 3
4 2 3 5 1
4 2 3 1 5
4 2 1 5 3
4 2 1 3 5
4 1 5 3 2
4 1 5 2 3
4 1 3 5 2
4 1 3 2 5
4 1 2 5 3
4 1 2 3 5
3 5 4 2 1
3 5 4 1 2
3 5 2 4 1
3 5 2 1 4
3 5 1 4 2
3 5 1 2 4
3 4 5 2 1
3 4 5 1 2
3 4 2 5 1
3 4 2 1 5
3 4 1 5 2
3 4 1 2 5
3 2 5 4 1
3 2 5 1 4
3 2 4 5 1
3 2 4 1 5
3 2 1 5 4
3 2 1 4 5
3 1 5 4 2
3 1 5 2 4
3 1 4 5 2
3 1 4 2 5
3 1 2 5 4
3 1 2 4 5
2 5 4 3 1
2 5 4 1 3
2 5 3 4 1
2 5 3 1 4
2 5 1 4 3
2 5 1 3 4
2 4 5 3 1
2 4 5 1 3
2 4 3 5 1
2 4 3 1 5
2 4 1 5 3
2 4 1 3 5
2 3 5 4 1
2 3 5 1 4
2 3 4 5 1
2 3 4 1 5
2 3 1 5 4
2 3 1 4 5
2 1 5 4 3
2 1 5 3 4
2 1 4 5 3
2 1 4 3 5
2 1 3 5 4
2 1 3 4 5
1 5 4 3 2
1 5 4 2 3
1 5 3 4 2
1 5 3 2 4
1 5 2 4 3
1 5 2 3 4
1 4 5 3 2
1 4 5 2 3
1 4 3 5 2
1 4 3 2 5
1 4 2 5 3
1 4 2 3 5
1 3 5 4 2
1 3 5 2 4
1 3 4 5 2
1 3 4 2 5
1 3 2 5 4
1 3 2 4 5
1 2 5 4 3
1 2 5 3 4
1 2 4 5 3
1 2 4 3 5
1 2 3 5 4
1 2 3 4 5
```

${n}$<=$6$,$a_{i}$<=$10^{18}$



---

## B. Monster

# Monster

一个怪兽来到了高桥所居住的小镇，已知怪兽有$m$滴血，高桥有$n$颗子弹，每颗子弹可以让怪兽减$a_{i}$滴血。高桥想知道他至少需要几颗子弹才能打死这个怪兽。

# 输入格式

$n$ $m$

$a_{1}$ $a_{2}$ ...$a_{n}$

# 输出格式

高桥打死这个怪兽至少所需的子弹颗数(如果打不死怪兽输出-1）。

```input1
4 10
4 2 6 3
```

```output1
2
```

$n<100$,1<=$m$<=$10^{5}$,1<=$a_{i}$<=$10^{18}$



---

## C. 小白必做

小白必做 ^_^

没有输入和输出~

记得定义主函数



---

## D. 全排列2

# 全排列

给出一个正整数n,和一个长度为n的排列A，求这个排列的全排列（按从小到大的顺序输出）。

## 输入数据 1

```input1
5
1 2 3 4 5
```

## 输出数据 1

```output1
1 2 3 4 5
1 2 3 5 4
1 2 4 3 5
1 2 4 5 3
1 2 5 3 4
1 2 5 4 3
1 3 2 4 5
1 3 2 5 4
1 3 4 2 5
1 3 4 5 2
1 3 5 2 4
1 3 5 4 2
1 4 2 3 5
1 4 2 5 3
1 4 3 2 5
1 4 3 5 2
1 4 5 2 3
1 4 5 3 2
1 5 2 3 4
1 5 2 4 3
1 5 3 2 4
1 5 3 4 2
1 5 4 2 3
1 5 4 3 2
2 1 3 4 5
2 1 3 5 4
2 1 4 3 5
2 1 4 5 3
2 1 5 3 4
2 1 5 4 3
2 3 1 4 5
2 3 1 5 4
2 3 4 1 5
2 3 4 5 1
2 3 5 1 4
2 3 5 4 1
2 4 1 3 5
2 4 1 5 3
2 4 3 1 5
2 4 3 5 1
2 4 5 1 3
2 4 5 3 1
2 5 1 3 4
2 5 1 4 3
2 5 3 1 4
2 5 3 4 1
2 5 4 1 3
2 5 4 3 1
3 1 2 4 5
3 1 2 5 4
3 1 4 2 5
3 1 4 5 2
3 1 5 2 4
3 1 5 4 2
3 2 1 4 5
3 2 1 5 4
3 2 4 1 5
3 2 4 5 1
3 2 5 1 4
3 2 5 4 1
3 4 1 2 5
3 4 1 5 2
3 4 2 1 5
3 4 2 5 1
3 4 5 1 2
3 4 5 2 1
3 5 1 2 4
3 5 1 4 2
3 5 2 1 4
3 5 2 4 1
3 5 4 1 2
3 5 4 2 1
4 1 2 3 5
4 1 2 5 3
4 1 3 2 5
4 1 3 5 2
4 1 5 2 3
4 1 5 3 2
4 2 1 3 5
4 2 1 5 3
4 2 3 1 5
4 2 3 5 1
4 2 5 1 3
4 2 5 3 1
4 3 1 2 5
4 3 1 5 2
4 3 2 1 5
4 3 2 5 1
4 3 5 1 2
4 3 5 2 1
4 5 1 2 3
4 5 1 3 2
4 5 2 1 3
4 5 2 3 1
4 5 3 1 2
4 5 3 2 1
5 1 2 3 4
5 1 2 4 3
5 1 3 2 4
5 1 3 4 2
5 1 4 2 3
5 1 4 3 2
5 2 1 3 4
5 2 1 4 3
5 2 3 1 4
5 2 3 4 1
5 2 4 1 3
5 2 4 3 1
5 3 1 2 4
5 3 1 4 2
5 3 2 1 4
5 3 2 4 1
5 3 4 1 2
5 3 4 2 1
5 4 1 2 3
5 4 1 3 2
5 4 2 1 3
5 4 2 3 1
5 4 3 1 2
5 4 3 2 1
```

${n}$<=$6$,$a_{i}$<=$10^{27}$



---

## E. 邪恶的kunkka走奇怪的迷宫

## 题目背景

众所周知，土拨鼠kunkka非常的邪恶，不给小土拨鼠学员们买零食吃，同学们想到了一些鬼点子来整他，继上次土拨鼠dqy买来炸弹威逼土拨鼠kunkka后（[博客详情 - acjudge](https://acjudge.com/blog/350/659a89be08915142169513b2#1704626622780)），这次我们的坏点子是，将kunkka放进一个奇怪的迷宫，土拨鼠kunkka只有通关才能拿到他的土拨鼠粮，可是为了不让kunkka顺利通关，我们在迷宫中加了许多的障碍。

智慧的土拨鼠本来已经通过~~作弊~~努力通关了,可到终点后却发现一块字牌，上面写着"你只有求出有几条路可以顺利通过迷宫才能拿到你的土拨鼠粮！"
土拨鼠kunkka只能求助你，并答应给你买美味的零食。

## 题目简介

现在有$n*m$的迷宫，”.“代表空地，”#“代表我们给kunkka设的障碍。土拨鼠kunkka从坐标为$（startx，starty)$点出发，要走到坐标$(p,q)$点才能拿到他的土拨鼠粮，请你帮他求出通过迷宫一共有几条路吧

## 题目输入

整数$n, m, startx, starty, p, q$。
和一个$n$行$m$列的字符矩阵

## 题目输出

一个整数， 代表一共有几条路

### 样例输入

```
4 5 1 1 4 5
. . # . #
# . . . .
# . . # .
. # # . .
```

### 样例输出

```
2
```

## 数据范围

n<=100, m<=100
保证起点和终点一定在迷宫中

    



---

## F. CSP-J 模拟1

## 一、单项选择题（共15题，每题2分，共计30分；每题有且仅有一个正确选项)

1. 在标准ASCII码表中，已知英文字母Z的ASCII码十进制表示是90，那么英文字
   母B的ASCII码二进制表示是（ )。 {{ select(1) }}

- 01000001
- 01000010
- 01000011
- 01000000

2.以下关于CSP与NOIP的描述正确的是（ )  {{ select(2) }}

- A.CSP属于非专业认证，只有在校生才能参加
- B.CSP是中国电子学会举办的程序设计竞赛
- C.CSP和NOIP毫无关系，没参加CSP也可以直接参加 NOIP
- D.CSP和NOIP都是CCF旗下的程序设计赛事

3.以下不能用作C++程序中的标识符的是（ )。 {{ select(3) }}

- A.private
- B.friends
- C.news
- D.pascal

4. NOI复赛测评机所用的 Linux系统属于( )。 {{ select(4) }}

- A.UML
- B.IDE
- C.OS
- D.Database

5. 如果65536种颜色用二进制编码来表示，至少需要( ）个二进制位。 {{ select(5) }}

- A.16
- B.8
- C.12
- D.10

6.搜索算法中的BFS算法经常用到的数据结构是（ )。 {{ select(6) }}

- A.堆
- B.栈
- C.链表
- D.队列

7.在已经从小到大排好序的n元素单向链表中查询是否存在关键字为k的元素，最坏
情况下运行的时间复杂度是（ ). {{ select(7) }}

- A.O(logn)
- B.O(n)
- C.O(n)
- D.O(nlogn)

8.在下列各种排序算法中，不是以“比较”作为主要操作的算法是（) {{ select(8) }}

- A.归并排序
- B.快速排序
- C.冒泡排序
- D.桶排序

9.关于计算机网络，下面的说法中正确的是（）。 {{ select(9) }}

- A.现在的计算机必须连接到互联网才能正常运行
- B.192.168.0.1是A类IP地址
- C.互联网的诞生用到了现代计算机技术和现代通信技术
- D.接入互联网的计算机的IP地址已经全部升级到了IPv6地址

10. 将(2,6,10，17)分别存储到某个地址区间为0~10的哈希表中，如果哈希函数h(x)。( )，将不会产生冲突，其中ab表示a除以b的余数，sqrt表示开平方，floor表示向下取整。 {{ select(10) }}

- A.×%11
- B.x%11
- C.2×%11
- D.floor(sqrt(x))%11

11.现在有一个十六进制数27，它等于二进制数的（ )。 {{ select(11) }}

- A.100011
- B.100101
- C.100111
- D.100011

12.以下逻辑表达式中，不管A、B如何取值，恒为假的是（ )。 {{ select(12) }}

- A.(-AVB)A(AVB)AA
- B.((-AVB)V(AV-B))AB
- C.AA((-AVB)V(AV-B))A-A
- D.((-AVB)V(AV-B))AAA-B

13.某二叉树有16个结点都同时有左孩子结点和右孩子结点，则该二叉树中的叶子结点数是（ ）个。 {{ select(13) }}

- A.19
- B.17
- C.18
- D.16

14.现有16张不同的卡片，其中红、黄、蓝、绿色卡片各4张。从中任取3张，要求红
色最多有1张并且3张卡片不能是同一种颜色，不同的取法组合共有（）种。 {{ select(14) }}

- A.232
- B.472
- C.256
- D.484

15.有8个结点的非连通无向图最多有( ）条边 {{ select(15) }}

- A.8
- B.7
- C.21
- D.49

## 二、阅读程序（程序输入不超过数组或字符串定义的范围，判断题正确填√，错误填×

### 除特殊说明外，判断题每题1.5分，选择题每题3分，共计40分）

#### (1)

```c++
#include <bits/stdc++.h>
using namespace std;
int gcd(int a, int b){
    int tmp;
    if(b) tmp = a%b;
    else return a;
     while(tmp)f
     a =b;
     b = tmp;
     tmp = a%b;
     return b;
}

 int lcm(int a, int b)[
 	return a/gcd(a,b)*b;
}
 int main(){
 	int a,b;
     cin >> a >> b;
     cout << gcd(a, b) << endl;
     return 0;
 }
```

### 判断题

16. 若输入`0 2024`，则输出结果为0。 (） {{ select(16) }}

- true
- false

18. 将第5行中的 `if(b)` 改为`if(0!=b)` ，程序的运行结果不会改变。 (） {{ select(17) }}

- true
- false

20. 若输入2.4 4.8，则输出错误。 () {{ select(18) }}

- true
- false

22. 将第15行 `return a/gcd(a，b)*b` 替换成 `return a*b/gcd(a，b)` ，程序的运行结果不会改变。 ） {{ select(19) }}

- true
- false

### 选择题

20. 若输入数据为`20244204 12348`，则输出为（ )。. {{ select(20) }}

- A.18
- B.36
- C.12
- D.24

21. 若将第20行`cout << gcd(a，b)<< endl`替换成`cout<< lcm(a，b)<< endl`，
    输入数据为`20244204 12348`，则输出为()。 {{ select(21) }}

- A.6,943,761,972
- B.程序出错，无输出
- C.3,471,880,986
- D.某个负数

#### (2)

```C++
#include <bits/stdc++.h>
using namespace std;
int main(){
	char s[128] = 10;
    cin.getline(s,128);
    for(int i = 0; i< strlen(s); ++i){
    	if(s[i]>= 65 88 s[i] <= 90)[
        if(s[i]== 90){
        	s[i]= 65;
        }else{
        	s[i]+= 1;
        }
        s[i] ^=’ ’;
	}
    cout << s << endl;
    return 0;
}
```

### 判断题

22. 输入一个长度大于128的字符串，程序的输出一定会出错。() {{ select(22) }}

- true
- false

24. 将第6行cin.getline(s，128)更换为getline(cin，s)，程序的运行结果不（) {{ select(23) }}

- true
- false

26. 将第13行s[i]^='‘更换为s[i]^=32，程序的运行结果不变。 () {{ select(24) }}

- true
- false

28. 将第9行if(s[i]==90)更换为if(slil==‘z'）。程序的运行结果不变() {{ select(25) }}

- true
- false
  

### 选择题

26. 若输入字符串s为`CSPjs2024`，则输出为（）。 {{ select(26) }}

- A.dtqjs2024
- B.cspjs2024
- C.DTQjs2024
- D.CSPjs2024

27.若输出`bcdea`，则输入字符串s为( )。 {{ select(27) }}

- A.BCDEA
- B.ABCDZ
- C.abcde
- D.bcdez

#### (3)

```C++
#include <bits/stdc++.h>
using namespace std;
int used[20],a[20],n;
long long ret=0;
bool flag;
void dfs(int x)
{
	int i;
    if(x>n)
    {
    	flag=1;
        for(i=l;ic=n;i++)
        {
        	if(a[i]+i > n+2)
			{
				flag=0;
            	break;
			}
		}
		if(flag) ret++;
        return;
    }
	for(i=1l;ic=n;i++)
	{
		if(used[i]==0)
		{
			used[i]=1, a[x]=i;
            dfs(x+1);
            used[i]=0, a[x]=0;
		}
	}
    
    
}
int main()
{
	cin>>n;
    cout<<ret;
    return 0;
}
```

### 判断题

28. 如果输入n的值为0，那么程序在运行过程中一定会出现错误。 ( ) {{ select(28) }}

- true
- false

30. 如果将第26行的a[x]=0去掉，输出的结果不会改变。 ( ) {{ select(29) }}

- true
- false

32. 该程序算法的时间复杂度是O(n!*n)。 ( ) {{ select(30) }}

- true
- false

34. 输入某个正整数n.程序运行的输出结果可能会等于0。 （ ) {{ select(31) }}

- true
- false
  

### 选择题

32. 若输入n=2，那么输出结果是（) {{ select(32) }}

- A.1
- B.2 。
- C.3
- D.0

33. 若输入n=5，那么输出结果是（)。 {{ select(33) }}

- A.16
- B.5
- C.10
- D.12

34.（4分）若输出结果为128，则输入n是( )。 {{ select(34) }}

- A.8
- B.7
- C.16
- D.32

## 三、完善程序（单选题，每小题3分，共计30分）

### （1）

输入一个十进制正整数n，然后将n转换为二进制数，最后统计二进制数的各位数字，看看一共有多少位为1，然后打印出总数。
输入格式：
第1行输入十进制正整数 n。
输出格式：
输出一个整数，表示十进制正整数n转换成的二进制数中有多少位为1。
输入样例：
127
输出样例：
7
样例说明：
十进制数127转换为二进制数1111111，二进制位一共有7个1.所以输出7。

```C++
#include<bits/stdc++.h>
using namespace std;
int a[33],cnt;
int main()
{
	int n,sum,X;
    cin>>n;
    cnt=0;
    ①;
    while(x>0)
    {
    	a[②]=x%2;
        ③；
    }
    sum=0；
    for(int i=1;④;i++)
	if(a[i]==1)
		⑤;
    cout<<sum<<endl;
    return 0;

	
}
```

35. ①处应填() {{ select(35) }}

- A.x=n
- B.x=1
- C.x=0
- D.x=n-1

36. ②处应填( )。 {{ select(36) }}

- A.--cnt
- B.++cnt
- C.cnt--
- D.cnt

37. ③处应填（ )。 {{ select(37) }}

- A.x/=2
- B.n++
- C.x++
- D.n--

38. ④处应填( )。 {{ select(38) }}

- A.i<cnt
- B.i<cnt/2
- C.i<=cnt
- D.i<=cnt/2

39. ⑤处应填( )。 {{ select(39) }}

- A.sum--
- B.sum=x
- C.sum=0
- D.sum++

### (2)

在一个 $n\times n$ 的棋盘上布满了0和1，如图（a)所示（n=7）。为叙述方便，将0用字母
表示，如图(b)所示。
![image](/file/267/zpk9mDWgVRVEsF7JTEY77.jpeg)
跳棋规则如下。
(i) 从某个0格出发，可以向上、下、左、右4个方向连续越过若干个(至少1个）1 格后跳入	下一个0格。如图(b)所示，从A出发，可跳到 B，或者跳到E，但不能直接跳到K。在跳到 B 	之后还可以继续跳到F，在跳到 E 之后可继续跳到F或K，直到不能再跳为止。
(ii)每个0格只能到达一次，给出的起始点不能再次到达，也不能越过。跳过的鹿
离为跳过1格的个数加1，如从A到B，跳过距离为3，从B到F，跳过距离
为2。
问题：当给出棋盘和起始点之后，最远能跳的距离是多少？
如图（b）所示，从A出发，可跳的路线不止一条，其中一条为：
A-B-F-L-K-E(可能不唯一）
3 2 3 3 3
它的跳过距离为14。
输入格式：
第1行3个整数n（1＜n 100）、x、y（xy是起始点坐标，图（b）中A处坐标
为1，3）。接下来n行，每行n个数（0或1），数与数之间用一个空格分隔。输出格式：
一个整数，即最大可跳距离（若不能跳，则输出0）。
输入样例：
4 3 2
10 10
1111
0010
1 10 1
输出样例：
6

```C++
#include <bits/stdc++.h>
using namespace std;
int n,i,j,k,ans;
int a[105][105],vis[105][105]；//a 表示棋盘，vis统计点是否走过
int dx[4]=f-1,1,0,0),dy[4]=[0,0,1,-1];
void dfs(int x,int y,int step)
{
	ans = ①;
	for(int i=0;i<4;i++)
	{
		int tx=x,ty=y,s=0;
        while(tx+dx[i]>0 and tx+dx[i]<=nand ty+dy[i]>0 and ty+dy[i]<=n)
        {
        	tx+=dx[i];
	        ty+=dy[i];
	        S++；
	        if(②)
	        	break;
		}
		
        if(tx>0 and tx<=n and ty>0 and ty<=n and vis[tx][ty]==0
        and a[tx][ty]==0 and s!=1)
		{
			vis[tx][ty]=1;
	        dfs(tx,ty,③);
	        ④; 
		}
	}


int main()
{
	int x,y,i,j;
	cin>>n>>x>>y;
	for(i=1;ic=n;i++)
	{
		for(j=1;j<=n;j++)
		{
			cin>>a[i][j];
		}
	}
	
	⑤;
	dfs(x,y,0);
	cout<<ans<<endl;
	return 0;
}
```

40. ①处应填（) {{ select(40) }}

- A.0
- B.max(ans,step)
- C.1
- D.step

41. ②处应填（ )。 {{ select(41) }}

- A.vis[tx][ty]==1
- B.vis[tx][ty] == 0
- C.a[tx][ty]== 1
- D.a[tx][ty]== 0

42. ③处应填（ )。 {{ select(42) }}

- A.step+s
- B.step+1
- C.step
- D.step-1

43. ④处应填( )。 {{ select(43) }}

- A.vis[tx][ty]=1
- B.vis[tx][ty]= 0
- C.a[tx][ty]=1
- D.a[tx][ty] = 0

44. ⑤处应填( )。 {{ select(44) }}

- A.a[x][y]=1
- B.a[x][y]= 0
- C.vis[x][y]=1
- D.vis[x][y]= 0



---

## G. 马景翊能做出来我吃

# Background

🤪🤪🤪🤪🤪🤪🤪🤪🤪

# Description

给定两个整数a,b;
输出a+b的和


# Format

intput
a b
output
a+b

# Samples

```input1
因本题过于简单所以不给予输入样例
```

```output1
因本题过于简单所以不给予输出样例
```



---

## H. 三角形面积

# 三角形面积

给出一个三角形的一个直角边和一个斜边，输出三角形的面积。

```input1
4 5
```

```output1
6
```

${a}$<=$10^{18}$        $b$<=10^{18}



---

## I. a+b

# Description

Given two integers x and y, print the sum.

# Format

## Input

Two integers x and y<72861872878278728728721231 .

## Output

One integer, the sum of x and y.

# Samples

```input1
123 500
```

```output1
623
```

# Limitation

1s, 1024KiB for each test case.



---
