2020-2021年度第⼆届全国⼤学⽣算法设计与编程挑战赛(冬季赛)——正式赛(做题记录)
A-塔
【题⽬描述】
初来到海拉尔⼤陆的你,有些许的局促,但当你看到塔,或许⼀切的⼀切都迎刃⽽解。
⼀个层⾼为n的字⺟塔的定义为:
- 共n⾏,由字⺟组成的等腰三⻆形。 塔顶为第⼀层,且只有⼀个⼤写字⺟A;下⾯
- 每⼀层都⽐上⾯⼀层多两个字⺟。 每⼀层都是左右对称。
- 对于第i层,前i个字⺟由⼤写字⺟表中A~第i个字⺟顺序组成。
为了稳住局⾯,样例给出了层⾼为5的字⺟塔,请你输出层⾼ 26 的字⺟塔。
输出描述:
输出⾼度为 26 的塔。
样例
样例输⼊
TIPS:此题是⼀道程序填空题,下⾯会给出此题正确代码的挖空版本,选⼿可以根据提示对代码进⾏完善。
下⾯给出层⾼为5的塔的样例输出
样例输出
#include<stdio.h>
int main() {
char c1;
int n = 26; //设定塔的层数为26
int i, j;
for (i = 1; i <= n; i++) { //对塔每 一层按照规律进行构造。
//首先进行输出空格的操作:对于第i行,字符前面的空格个数为n-i个。
for(j=1; j<=n-i; j++)
printf(" ");
for (j = 1; j <= i; j++) { //按照规律1,输出第1~第个大写字母。
c1 =j +'A'- 1; //第j个大写字母为'A'+j-1
printf("%c",c1); //输出第j个大写字母
}
for (j = i-1; j >= 1; j--) {//按照规律1,输出第i-1~第1 个大写字母,注意是倒序
c1 = j+'A'-1;
printf("%c",c1);
}
printf("\n");//第i.行输出结束,进行换行。
}
return 0;
}
B-⽇记
【题⽬描述】
题⽬描述
你喜欢偷窥帕雅⽇记⼀事已⼴为⼈知,帕雅特地在⽇记本上加了密。
加密的⽅式很简单:对于⼀串字符串,如果其中有 l , i , n , k , e 这五个字⺟当中的任意⼀个,帕雅都会
在这后⾯加上 bt 再加上原来的字⺟已加密,如 love 就会加密成 lbtlovebte 。
下⾯给出帕雅⽇记的第⼀⻚内容,请你根据他的⽇记内容进⾏解密。
ibti lbtlovebte lbtlibtinbtnkbtkebtezbas jebte dosadnbtna
ovakbtkebtemibtijaxaszxdbtddbtddbtddbtddbtddbtd
上⾯内容为⼀⾏内容,为帕雅的⽇记第⼀⻚内容
但这能拦得住你吗?时间紧迫,快解密吧!
输出描述:
输出帕雅⽇记第⼀⻚解密后的内容。
【解析】
手动:
碰到一个‘l’ 或者‘i’或者‘n’或者‘k’或者‘e’跳过后面3个字符,一个一个解密得
i love linkezbas je dosadna ovakemijaxaszxdbtddbtddbtddbtddbtddbtd
package 第2届;
public class _02B日记 {
// 加密的方式很简单:对于一串字符串,如果其中有l,i,n,k,e这五个字母当中的任意一个,
// 帕雅都会在这后面加上bt再加上原来的字母已加密
// 如love就会加密成lbtlovebte。
// 加密码:ibti lbtlovebte lbtlibtinbtnkbtkebtezbas jebte dosadnbtna ovakbtkebtemibtijaxaszxdbtddbtddbtddbtddbtddbtd
public static void main(String[] args) {
// l,i,n,k,e
// System.out.println("i love linkezbas je dosadna ovakemijaxaszxdbtddbtddbtddbtddbtddbtd");
String string = "ibti lbtlovebte lbtlibtinbtnkbtkebtezbas jebte dosadnbtna ovakbtkebtemibtijaxaszxdbtddbtddbtddbtddbtddbtd";
char[] str = string.toCharArray();
System.out.println("加密码:");
System.out.println(string);
System.out.println("原码:");
for (int i = 0; i < str.length; i++) {
System.out.print(str[i]);
if (str[i] == 'l' || str[i] == 'i' || str[i] == 'n' || str[i] == 'k' || str[i] == 'e') {
i += 3;
}
}
}
}
控制台
C-哥布林
题目描述
成堆成山的哥布林已经做好出征前的准备,特殊的,这次出征时,每只哥布林出征前都要拿一把武器。
武器库给这些哥布林们配有M把各不相同的武器,编号为 1—M,目前,前N只哥布林已经选好了武器,他们 分别选的武器编号是ai,a2,…,an,恰好,之后将有M-N只哥布林来拿武器。
这M-N只哥布林取武器的方式有些许特殊:
-对于每只哥布林,都会在「未被取用的」武器区间中去找「最长的」一个连续的武器区间,如果「最长的」的 武器区间有不止一个,则取用最左边的一个。
-出于隐私,哥布林将取用这个连续区间上最中间的一个武器。如果区间段为偶数,则取用中间靠左的武器。
可以肯定的是,每个武器都会被哥布林「不重复地」取用。
为了更好的应对哥布林的入侵,你想知道其中T名哥布林选用的武器编号。
这T名哥布林的编号为b1,b2,b(T).
为了更快捷的做好出征准备,哥布林们总是有序的。
即 皆为单调递增的数组
输⼊描述:
第⼀⾏输⼊三个整数 ,含义如题⾯描述。
第⼆⾏包括 个整数,每个整数之间⽤空格分隔开,表示ai
第三⾏包括 个整数,每个整数之间⽤空格分隔开,表示bi
输出描述:
每⾏⼀个整数,分别表示这 只哥布林对应的武器编号。
样例
样例输⼊①
7 1 4
4
2 3 4 5
样例输出①
2
6
1
3
样例输⼊②
10 2 4
2 8
1 3 5 8
样例输出②
2
5
6
4
- 待解决
D-质数区间
题⽬描述
有⼀个有序的⽆限⼤集合,集合内元素是素数。每⼀个集合内的元素按升序排序。集合顺序优先按「集合元素和」
排序,其次按「集合字典序」排序。您需要给出给定区间[l,r]的内容。
该集合的⼀部分为
[2], [3], [2, 3], [5], [2, 5], [7], [3, 5], [2, 7], [2, 3, 5], [3, 7], [11], [2, 3, 7], [5, 7],
[2, 11], [13], [2, 5, 7],
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210314224951865.png)
样例
样例输入①
1 6
样例输出①
[2],[
样例输入②
25 30
样例输出②
2,5],
2,5],
- 待解决
E-神仙爱采药
- 待解决
F-但更爱字符串
样例输⼊①
No mind to think, No Will To Break, No voick to cry suffering,Born Of God And Void.
样例输出①
No mind to think, NWTB (No Will To Break), No voick to cry suffering,BOGAV (Born Of God And Void).
样例输⼊②
You shall seal the blinding light that plagues their dreams.You Are The Vessel, You Are THe Hollow Knight.!
样例输出②
You shall seal the blinding light that plagues their dreams.YATV (You Are The Vessel), YA (You Are) THe HK (Hollow Knight).!
样例输⼊③
In wilds beyond they speak your NamE With Reverence And Regret, For none could tame our Savage Souls yet you the challenge met, Under, Palest. Watch, You Taught , you changed. Base instincts were redeemed, A World You gave to bug and beast as they had never dreamed.
样例输出③
In wilds beyond they speak your NamE WRAR (With Reverence And Regret), For none could tame our SS (Savage Souls) yet you the challenge met, Under, Palest. Watch, YT (You Taught) , you changed. Base instincts were redeemed, A WY (World You) gave to bug and beast as they had never dreamed.
- 待解决
G-猫腥草争夺大战
输入1
6 2
1 3
3 2
2 5
1 4
4 6
输出1
C!
输入2
3 1
1 3
1 2
输出2
W!
输入3
11 3
1 2
1 4
2 3
2 6
4 5
4 10
5 7
6 8
6 9
7 11
输出3
C!
- 待解决
H-⽆限⼭河印的故事
4 4 9
dadd
caca
llxa
ssca
39/2048
样例输⼊②
1 2 2
ac
样例输出②
5/16
I-奇怪的传输机增加了
样例输⼊①
70000 20 140
样例输出①
N0!
9 1820.860641
样例输⼊②
70000 8 14
样例输出②
YE5!
3312.486449
- 待解决
J-奇怪的⼩鸭⼦也增加了
题⽬背景
这题是个签到题。
【题⽬描述】
有⼀个 AB 的⼤澡盆,还有若⼲个 ab 的⻓⽅形⼩鸭⼦,澡盆⾥最少放⼏只鸭⼦后,便⽆法再向其中放⼊更多的鸭⼦?
鸭⼦很倔强,不能旋转成 ba ,也不能重叠放置。
鸭⼦很倔强,不能旋转成 ba ,也不能重叠放置。所以行列一样的情况。
先看行,如果平均小间隙的长度 < 鸭子长方形的长,则无法继续加入。
尝试行添加0,1块等等,直到不能添加为止。
列也同理。
最后的结果是最少的块数 = row*col
package 第2届;
import java.util.Scanner;
public class _10J奇怪的小鸭子也增加了 {
// 有一个 A×B 的大澡盆,还有若干个 a×b 的长方形小鸭子,
// 澡盆里最少放几只鸭子后,便无法再向其中放入更多的鸭子?
// 鸭子很倔强,不能旋转成 b * a,也不能重叠放置
// Sample Input 1
// 12 10 4 5
// Sample Output 1
// 2
// Sample Input 2
// 20 10 9 2
// Sample Output 2
// 3
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int A = sc.nextInt();
int B = sc.nextInt();
int a = sc.nextInt();
int b = sc.nextInt();
int row = 0;
int col = 0;
//每一行剩下的小间隙
int rowYu = A;
do {
row++;
// System.out.println("row " + row);
rowYu = (A - a*row) / (row + 1);
// System.out.println("rowYu " + rowYu);
} while (rowYu >= a);
int colYu = B;
do {
col++;
colYu = (B - b*col) / (col + 1);
} while (colYu >= b);
// System.out.println(row);
// System.out.println(col);
System.out.println(row * col );
}
}
K-关于哥俩好的数字这件事
输出描述:
最⼩的数位和。
样例
样例输⼊①
5
样例输出①
110
样例输⼊②
2
样例输出②
11
L-我们仍未知道那窝蛋的名字
3 5
1 1 2 1 3
1 3 1 2 3
2 4 1 2
2 6 1 3
2 9 1 3
样例输出①
6
9
15
样例输⼊②
4 6
1 1 2 3 -2
1 2 3 3 7
2 3 3 1
2 4 3 1
1 5 4 -5 18
2 6 3 4
样例输出②
10
13
19
样例输⼊③
6 9
1 2 5 8 -10
2 3 3 5
1 4 4 12 18
2 5 1 2
1 7 2 4 6
2 9 2 1
1 10 4 0 34
2 11 5 5
2 12 1 4
样例输出③
-2
baigei
14
62
34
M出题人说这道题是一个签到题
题目在java代码注释中
package 第2届;
import java.util.Scanner;
public class _13M出题人说这道题是一个签到题 {
// 如果输入的值是1,则回复ADPC。
// 否则的话,输出12345
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String string = sc.nextLine();
if (string.equals("1")) {
System.out.println("ADPC");
}else {
System.out.println("12345");
}
}
}