渭南网站建设网站排名优化,指数运算法则,儿童个人网站模板,注册工程师目录 L4-103 就不告诉你
输入格式#xff1a;
输出格式#xff1a;
输入样例#xff1a;
输出样例#xff1a;
L4-104 Wifi密码
输入格式#xff1a;
输出格式#xff1a;
输入样例#xff1a;
输出样例#xff1a;
L4-105 冠军魔术
输入格式#xff1a;
…目录 L4-103 就不告诉你
输入格式
输出格式
输入样例
输出样例
L4-104 Wifi密码
输入格式
输出格式
输入样例
输出样例
L4-105 冠军魔术
输入格式
输出格式
输入样例 1
输出样例 1
输入样例 2
输出样例 2
L4-106 判断题
输入格式
输出格式
输入样例
输出样例
L4-107 检查密码
输入格式
输出格式
输入样例
输出样例
L4-108 谷歌的招聘
输入格式
输出格式
输入样例 1
输出样例 1
输入样例 2
输出样例 2
L4-109 考试周
输入格式
输出格式
输入样例
输出样例
L4-110 真的恭喜你
输入格式
输出格式
输入样例 1
输出样例 1
输入样例 2
输出样例 2
L4-111 Cassels方程
输入格式
输出格式
输入样例
输出样例
L4-112 不变初心数
输入格式
输出格式
输入样例
输出样例
L4-113 编程团体赛
输入格式
输出格式
输入样例
输出样例
L4-114 自动编程
输入格式
输出格式
输入样例
输出样例
L4-115 太神奇了
输入格式
输出格式
输入样例
输出样例
样例说明
L4-116 字母串
输入格式
输出格式
输入样例
输出样例
L4-117 矩阵列平移
输入格式
输出格式
输入样例
输出样例
L4-118 均是素数
输入格式
输出格式
输入样例
输出样例
L4-201 出栈序列的合法性
输入格式
输出格式
输入样例
输出样例 L4-202 二叉搜索树的2层结点统计
L4-203 三足鼎立
输入格式
输出格式
输入样例
输出样例
样例解释
L4-204 盲盒包装流水线
输入格式
输出格式
输入样例
输出样例
L4-205 浪漫侧影
输入格式
输出格式
输入样例
输出样例
L4-301 狼人杀
输入格式:
输出格式:
输入样例 1:
输出样例 1:
输入样例 2:
输出样例 2解不唯一:
输入样例 3:
输出样例 3:
L4-302 拼题A打卡奖励
输入格式
输出格式
输入样例
输出样例
样例解释 L4部分的题目难度可以说是比较混乱又简单的也有难的比较考验实际问题的求解。
到这里算法程序设计竞赛的188道题就全部结束了希望大家不管是在期末考试复习还是平时的练习都取得满满的收获。
L4-103 就不告诉你
分数 7 全屏浏览 切换布局
作者 CHEN, Yue
单位 浙江大学
做作业的时候邻座的小盆友问你“五乘以七等于多少”你应该不失礼貌地围笑着告诉他“五十三。”本题就要求你对任何一对给定的正整数倒着输出它们的乘积。 输入格式
输入在第一行给出两个不超过 1000 的正整数 A 和 B其间以空格分隔。
输出格式
在一行中倒着输出 A 和 B 的乘积。
输入样例
5 7输出样例
53
import java.util.*;
public class Main{public static void main(String[] args){Scanner scnew Scanner(System.in);int asc.nextInt();int bsc.nextInt();String sString.valueOf(a*b);int flag0;for(int i0;is.length();i){if(s.charAt(s.length()-i-1)0i0){flag1;continue;}if(i!0s.charAt(s.length()-i-1)!0)flag0;if(flag0)System.out.print(s.charAt(s.length()-i-1));}}
} L4-104 Wifi密码
分数 5 全屏浏览 切换布局
作者 CHEN, Yue
单位 浙江大学
下面是微博上流传的一张照片“各位亲爱的同学们鉴于大家有时需要使用 wifi又怕耽误亲们的学习现将 wifi 密码设置为下列数学题答案A-1B-2C-3D-4请同学们自己作答每两日一换。谢谢合作~”—— 老师们为了促进学生学习也是拼了…… 本题就要求你写程序把一系列题目的答案按照卷子上给出的对应关系翻译成 wifi 的密码。这里简单假设每道选择题都有 4 个选项有且只有 1 个正确答案。 输入格式
输入第一行给出一个正整数 N≤ 100随后 N 行每行按照 编号-答案 的格式给出一道题的 4 个选项T 表示正确选项F 表示错误选项。选项间用空格分隔。
输出格式
在一行中输出 wifi 密码。
输入样例
8
A-T B-F C-F D-F
C-T B-F A-F D-F
A-F D-F C-F B-T
B-T A-F C-F D-F
B-F D-T A-F C-F
A-T C-F B-F D-F
D-T B-F C-F A-F
C-T A-F B-F D-F输出样例
13224143
import java.util.*;
public class Main{public static void main(String[] args){Scanner scnew Scanner(System.in);int nsc.nextInt();sc.nextLine();String mima;for(int i0;in;i){String ssc.nextLine();int indexs.indexOf(T);if(s.charAt(index-2)A)mimamima1;if(s.charAt(index-2)B)mimamima2;if(s.charAt(index-2)C)mimamima3;if(s.charAt(index-2)D)mimamima4;}System.out.println(mima);}
} L4-105 冠军魔术
分数 5 全屏浏览 切换布局
作者 陈越
单位 浙江大学 2018年FISM世界魔术大会近景总冠军简纶廷的表演中有一个情节以桌面上一根带子为界当他将纸牌从带子的一边推到另一边时纸牌会变成硬币把硬币推回另一边会变成纸牌。
这里我们假设纸牌会变成等量的硬币而硬币变成纸牌时纸牌的数量会加倍。那么给定纸牌的初始数量当他来回推了 N 次来/回各算一次后手里拿的是纸牌还是硬币数量是多少
输入格式
输入在一行里给出两个正整数分别是纸牌的初始数量和魔术师推送的次数。这里假设初始状态下魔术师手里全是纸牌。
输出格式
如果最后魔术师手里是纸牌输出 0 和纸牌数量如果是硬币则输出 1 和硬币数量。数字间须有 1 个空格。题目保证结果数值不超出整型范围即 231−1。
输入样例 1
3 7输出样例 1
1 24输入样例 2
8 4输出样例 2
0 32
#includestdio.h
int main(){int chushi,c,a,j,i;scanf(%d %d,chushi,c);if(c%20){a0;}else{a1;}jchushi;if(a0){for(i1;ic/2;i){jj*2;}}if(a1){for(i1;i(c-1)/2;i){jj*2;}
}printf(%d %d,a,j);return 0;
} L4-106 判断题
分数 5 全屏浏览 切换布局
作者 CHEN, Yue
单位 浙江大学
判断题的评判很简单本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分。
输入格式
输入在第一行给出两个不超过 100 的正整数 N 和 M分别是学生人数和判断题数量。第二行给出 M 个不超过 5 的正整数是每道题的满分值。第三行给出每道题对应的正确答案0 代表“非”1 代表“是”。随后 N 行每行给出一个学生的解答。数字间均以空格分隔。
输出格式
按照输入的顺序输出每个学生的得分每个分数占一行。
输入样例
3 6
2 1 3 3 4 5
0 0 1 0 1 1
0 1 1 0 0 1
1 0 1 0 1 0
1 1 0 0 1 1输出样例
13
11
12
#includeiostream
using namespace std;
struct ti{int fenzhi;int duicuo;
};
int main(){int n,m;cinnm;struct ti ti[m];for(int i0;im;i){cinti[i].fenzhi;}for(int i0;im;i){cinti[i].duicuo;}for(int i0;in;i){int sum0;for(int j0;jm;j){int t;cint;if(tti[j].duicuo)sumsumti[j].fenzhi;}coutsumendl;}
} L4-107 检查密码
分数 5 全屏浏览 切换布局
作者 陈越
单位 浙江大学
本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能。该网站要求用户设置的密码必须由不少于6个字符组成并且只能有英文字母、数字和小数点 .还必须既有字母也有数字。
输入格式
输入第一行给出一个正整数 N≤ 100随后 N 行每行给出一个用户设置的密码为不超过 80 个字符的非空字符串以回车结束。
注意 题目保证不存在只有小数点的输入。
输出格式
对每个用户的密码在一行中输出系统反馈信息分以下5种
如果密码合法输出Your password is wan mei.如果密码太短不论合法与否都输出Your password is tai duan le.如果密码长度合法但存在不合法字符则输出Your password is tai luan le.如果密码长度合法但只有字母没有数字则输出Your password needs shu zi.如果密码长度合法但只有数字没有字母则输出Your password needs zi mu.。
输入样例
5
123s
zheshi.wodepw
1234.5678
WanMei23333
pass*word.6
输出样例
Your password is tai duan le.
Your password needs shu zi.
Your password needs zi mu.
Your password is wan mei.
Your password is tai luan le.
#includeiostream
using namespace std;
int main(){int n;cinn;getchar();for(int i0;in;i){string str;getline(cin,str);if(str.length()6)coutYour password is tai duan le.endl;else{int havenum 0;//数字int havech 0;//字母int haveother 0;//其他字符for(int j0;jstr.length();j){if(str[j]0str[j]9)havenum1;else if((str[j]astr[j]z)||(str[j]Astr[j]Z))havech1;else if(str[j]!.)haveother1;}if(haveother1)coutYour password is tai luan le.endl;else if(havech1havenum1)coutYour password is wan mei.endl;else if(havech0)coutYour password needs zi mu.endl;elsecoutYour password needs shu zi.endl;}}return 0;
}L4-108 谷歌的招聘
分数 20 全屏浏览 切换布局
作者 陈越
单位 浙江大学
2004 年 7 月谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌如下图用于招聘。内容超级简单就是一个以 .com 结尾的网址而前面的网址是一个 10 位素数这个素数是自然常数 e 中最早出现的 10 位连续数字。能找出这个素数的人就可以通过访问谷歌的这个网站进入招聘流程的下一步。 自然常数 e 是一个著名的超越数前面若干位写出来是这样的e 2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921... 其中粗体标出的 10 位数就是答案。
本题要求你编程解决一个更通用的问题从任一给定的长度为 L 的数字中找出最早出现的 K 位连续数字所组成的素数。
输入格式
输入在第一行给出 2 个正整数分别是 L不超过 1000 的正整数为数字长度和 K小于 10 的正整数。接下来一行给出一个长度为 L 的正整数 N。
输出格式
在一行中输出 N 中最早出现的 K 位连续数字所组成的素数。如果这样的素数不存在则输出 404。注意原始数字中的前导零也计算在位数之内。例如在 200236 中找 4 位素数0023 算是解但第一位 2 不能被当成 0002 输出因为在原始数字中不存在这个 2 的前导零。
输入样例 1
20 5
23654987725541023819输出样例 1
49877输入样例 2
10 3
2468001680输出样例 2
404
#include iostream
#include cmath
using namespace std;
bool isPrime(int num){if (num 0 || num 1)return false;int m sqrt(num);for (int i 2; i m; i) {if (num % i 0)return false;}return true;
}
int main(){int L, K;string str1,str2;cinLK;cinstr1;int i;int num;for(i 0; i L - K; i){str2 str1.substr(i, K);num stoi(str2);if (isPrime(num)){cout str2;break;}
}if(iL-K)cout 404;
} L4-109 考试周
分数 4 全屏浏览 切换布局
作者 陈越
单位 浙江大学 考试周快到了浙江大学的电子屏又调皮了…… 本题请你帮小编写一个自动倒计时的程序对给定的日期例如“腊八”就对应 8和倒计时天数例如电子屏上的“四天之后”就对应 4自动调整公式里的分母例如 8/24 里面的那个 2。
输入格式
输入在一行中给出两个正整数A 是给定的日期不超过 30B 是倒计时天数不超过 10。
输出格式
在一行中输出公式 A/XB其中 X 是满足等式的数字输出时保留小数点后 1 位即可。
输入样例
8 3输出样例
8/2.73
#includeiostream
using namespace std;
int main(){double a,b;cinab;double ca/b;printf(%.0lf,a);cout/;printf(%.1lf,c);coutb;
} L4-110 真的恭喜你
分数 5 全屏浏览 切换布局
作者 陈越
单位 浙江大学
当别人告诉你自己考了 x 分的时候你要回答说“恭喜你考了 x 分”比如小明告诉你他考了90分你就用汉语拼音打出来 gong xi ni kao le 90 fen!。
但是如果小明没考好比如只考了 20 分你也“恭喜”人家就不对了。这时候你应该安慰他说“考了 20 分别泄气”用汉语拼音写出来就是 kao le 20 fen bie xie qi!。
输入格式
输入在一行里给出一位小朋友的分数。这个分数是一个 0 到 100 之间的整数。
输出格式
在一行中输出你对这位小朋友说的话。如果人家考到不低于 90 分就说 gong xi ni kao le X fen!如果不到 90 分就说 kao le X fen bie xie qi!。其中 X 是小朋友输入的分数。
输入样例 1
95输出样例 1
gong xi ni kao le 95 fen!输入样例 2
89输出样例 2
kao le 89 fen bie xie qi!
#includeiostream
using namespace std;
int main(){int fen;cinfen;if(fen90)coutgong xi ni kao le fen fen!;elsecoutkao le fen fen bie xie qi!;
} L4-111 Cassels方程
分数 4 全屏浏览 切换布局
作者 陈越
单位 浙江大学
Cassels方程是一个在数论界产生了巨大影响的不定方程x2y2z23xyz。该方程有无穷多自然数解。
本题并不是要你求解这个方程只是判断给定的一组 (x,y,z) 是不是这个方程的解。
输入格式
输入在第一行给出一个不超过 10 的正整数 N随后 N 行每行给出 3 个正整数 0x≤y≤z≤1000。
输出格式
对于每一组输入如果是一组解就在一行中输出 Yes否则输出 No。
输入样例
2
1 1 1
5 6 7输出样例
Yes
No
#includeiostream
using namespace std;
int main(){int n;cinn;for(int i0;in;i){int x,y,z;cinxyz;if(x*xy*yz*z3*x*y*z)coutYesendl;elsecoutNoendl;}
} L4-112 不变初心数
分数 5 全屏浏览 切换布局
作者 陈越
单位 浙江大学
不变初心数是指这样一种特别的数它分别乘 2、3、4、5、6、7、8、9 时所得乘积各位数之和却不变。例如 18 就是这样的数18 的 2 倍是 3636918 的 3 倍是 54549…… 18 的 9 倍是 1621629。对于 18 而言9 就是它的初心。本题要求你判断任一个给定的数是否有不变的初心。
输入格式
输入在第一行中给出一个正整数 N≤ 100。随后 N 行每行给出一个不超过 105 的正整数。
输出格式
对每个给定的数字如果它有不变的初心就在一行中输出它的初心否则输出 NO。
输入样例
4
18
256
99792
88672输出样例
9
NO
36
NO
#includeiostream
using namespace std;
int panduan(int x){int sum0;while(x0){sumx%10;xx/10;}return sum;
}
int main(){int n;cinn;for(int i0;in;i){int t;cint;int flag0;for(int j2;j9;j){if(panduan(t)!panduan(t*j)){flag1;break;}}if(flag1)coutNOendl;elsecoutpanduan(t)endl;}
} L4-113 编程团体赛
分数 20 全屏浏览 切换布局
作者 CHEN, Yue
单位 浙江大学
编程团体赛的规则为每个参赛队由若干队员组成所有队员独立比赛参赛队的成绩为所有队员的成绩和成绩最高的队获胜。
现给定所有队员的比赛成绩请你编写程序找出冠军队。
输入格式
输入第一行给出一个正整数 N≤104即所有参赛队员总数。随后 N 行每行给出一位队员的成绩格式为队伍编号-队员编号 成绩其中队伍编号为 1 到 1000 的正整数队员编号为 1 到 10 的正整数成绩为 0 到 100 的整数。
输出格式
在一行中输出冠军队的编号和总成绩其间以一个空格分隔。注意题目保证冠军队是唯一的。
输入样例
6
3-10 99
11-5 87
102-1 0
102-3 100
11-9 89
3-2 61输出样例
11 176
#includeiostream
using namespace std;
int main(){int n,res0,ans;cinn;int q[1001]{0};while(n--){int x,y,sc;char c;cinxcysc;q[x]sc;}for(int i1;i1001;i)if(q[i]!0resq[i]) resq[i],ansi;coutans res;
} L4-114 自动编程
分数 4 全屏浏览 切换布局
作者 陈越
单位 浙江大学
输出语句是每个程序员首先要掌握的语句。Python 的输出语句很简单只要写一个 print(X) 即可其中 X 是需要输出的内容。
本题就请你写一个自动编程机对任何一个要输出的整数 N给出输出这个整数的 Python 语句。
输入格式
输入给出一个不超过 105 的正整数。
输出格式
在一行中打印输出这个整数的 Python 语句其中不包含任何空格。
输入样例
520
输出样例
print(520)ninput()
print(print(n)) L4-115 太神奇了
分数 4 全屏浏览 切换布局
作者 陈越
单位 浙江大学 “告诉大家一个神奇的消息太神奇了明年全世界所有的人都同岁全部都等于2022。明年的日子很特别大概每1000年才会有一次。明年你的周岁年龄你的出生年每个人都是2022年。例如你明年57加上1965年生的加起来就是2022年。特别奇怪连中外专家都无法解释你计算一下看看是不是2022。真是千年等一回呀真准转朋友圈让大伙都算一下吧”
据说这个“电子包浆”贴每年都会出现。本题就请你根据发贴人提到的周岁年龄和出生年判断其发贴的时候是哪一年。
输入格式
输入在第一行中给出两个正整数即周岁年龄和出生年其中年龄在 (0, 200) 区间内出生年在 (1900, 2022) 区间内。
输出格式
在一行中输出发贴年份。
输入样例
57 1965
输出样例
2021
样例说明
因为贴子里说“明年全世界所有的人都同岁”所以发贴是在今年即 2021 年。
#includeiostream
using namespace std;
int main(){int x,y;cinxy;coutxy-1endl;
} L4-116 字母串
分数 7 全屏浏览 切换布局
作者 陈越
单位 浙江大学
英语老师要求学生按照如下规则写一串字母
如果写了某个大写字母下一个就必须写同个字母的小写或者写字母表中下一个字母的大写如果写了某个小写字母下一个就必须写同个字母的大写或者写字母表中前一个字母的小写当然也可以什么都不写就结束这个字母串。
例如 aAaABCDdcbBC 就是一个合法的字母串而 dEFfeFGhI 就是非法的。注意 a 没有前一个字母 Z 也没有下一个字母。
现在面对全班学生交上来的作业老师请你写个程序自动批改。
输入格式
输入在第一行给出一个不超过 100 的正整数 N。随后 N 行每行给出一位学生的作业即仅由英文字母组成的非空字母串长度不超过 2×106。
输出格式
对每位学生的作业如果正确就在一行中输出 Y否则输出 N。
输入样例
2
aAaABCDdcbBC
dEFfeFGhI
输出样例
Y
N#includeiostream
using namespace std;
int main(){int n,i,x;string s;cinn;while(n--){cins;x0;for(i0;is.size()-1;i){if(s[i]As[i]Z(s[i1]s[i]32||(s[i1]s[i]1s[i]!Z)))continue;else if(s[i]as[i]z(s[i1]s[i]-32||(s[i1]s[i]-1s[i]!a)))continue;else{x1;break;}}if(x1)coutN\n;elsecoutY\n;}
} L4-117 矩阵列平移
分数 20 全屏浏览 切换布局
作者 陈越
单位 浙江大学
给定一个 n×n 的整数矩阵。对任一给定的正整数 kn我们将矩阵的偶数列的元素整体向下依次平移 1、……、k、1、……、k、…… 个位置平移空出的位置用整数 x 补。你需要计算出结果矩阵的每一行元素的和。
输入格式
输入第一行给出 3 个正整数n100、kn、x100分别如题面所述。
接下来 n 行每行给出 n 个不超过 100 的正整数为矩阵元素的值。数字间以空格分隔。
输出格式
在一行中输出平移后第 1 到 n 行元素的和。数字间以 1 个空格分隔行首尾不得有多余空格。
输入样例
7 2 99
11 87 23 67 20 75 89
37 94 27 91 63 50 11
44 38 50 26 40 26 24
73 85 63 28 62 18 68
15 83 27 97 88 25 43
23 78 98 20 30 81 99
77 36 48 59 25 34 22输出样例
440 399 369 421 302 386 428样例解读
需要平移的是第 2、4、6 列。给定 k2应该将这三列顺次整体向下平移 1、2、1 位如果有更多列就应该按照 1、2、1、2 …… 这个规律顺次向下平移顶端的空位用 99 来填充。平移后的矩阵变成
11 99 23 99 20 99 89
37 87 27 99 63 75 11
44 94 50 67 40 50 24
73 38 63 91 62 26 68
15 85 27 26 88 18 43
23 83 98 28 30 25 99
77 78 48 97 25 81 22
#includebits/stdc.h
using namespace std;
int n,m,p,k;
int main(){int i,j;cinnkp;int a[n1][n1];int z[n1];for(i1; in; i){for(j1; jn; j){cina[i][j];}}int cnt1;for(j1; j*2n; j){z[j*2]cnt;if(cntk1)cnt1;}for(i1; in; i){int sum0;for(j1; jn; j){if(j%2){suma[i][j];continue;}if(iz[j]){sump;}elsesuma[i-z[j]][j];}if(i1)printf(%d,sum);elseprintf( %d,sum);}}L4-118 均是素数
分数 20 全屏浏览 切换布局
作者 陈越
单位 浙江大学
在给定的区间 [m,n] 内是否存在素数 p、q、rpqr使得 pqr、qrp、rpq 均是素数
输入格式
输入给出区间的两个端点 0mn≤1000其间以空格分隔。
输出格式
在一行中输出满足条件的素数三元组的个数。
输入样例
1 35输出样例
10样例解读
满足条件的 10 组解为
2, 3, 5
2, 3, 7
2, 3, 13
2, 3, 17
2, 5, 7
2, 5, 13
2, 5, 19
2, 5, 31
2, 7, 23
2, 13, 17
#includeiostream
#includecmath
using namespace std;
int panduan(int x){if(x1)return 0;for(int i2;isqrt(x);i){if(x%i0)return 0;}return 1;//意思是是素数
}
int main(){int m,n;cinmn;int sum0;for(int im;in-2;i){if(panduan(i)1){for(int ji1;jn-1;j){if(panduan(j)1){for(int kj1;kn;k){if(panduan(k)1){if(panduan(i*jk)1panduan(i*kj)1panduan(j*ki)1)sum;}}}}}}coutsum;
} L4-201 出栈序列的合法性
分数 35 全屏浏览 切换布局
作者 陈越
单位 浙江大学
给定一个最大容量为 m 的堆栈将 n 个数字按 1, 2, 3, ..., n 的顺序入栈允许按任何顺序出栈则哪些数字序列是不可能得到的例如给定 m5、n7则我们有可能得到{ 1, 2, 3, 4, 5, 6, 7 }但不可能得到{ 3, 2, 1, 7, 5, 6, 4 }。
输入格式
输入第一行给出 3 个不超过 1000 的正整数m堆栈最大容量、n入栈元素个数、k待检查的出栈序列个数。最后 k 行每行给出 n 个数字的出栈序列。所有同行数字以空格间隔。
输出格式
对每一行出栈序列如果其的确是有可能得到的合法序列就在一行中输出YES否则输出NO。
输入样例
5 7 5
1 2 3 4 5 6 7
3 2 1 7 5 6 4
7 6 5 4 3 2 1
5 6 4 3 7 2 1
1 7 6 5 4 3 2输出样例
YES
NO
NO
YES
NO
#include iostream
#includestack
using namespace std;
int v[1001]; // 存放待检序列
int main(){int m, n, k;cinmnk;for (int i0;ik;i){for (int j0;jn;j)cinv[j];stackint M;int flag1,now1;M.push(0); //垫上一个数字为了防止暴毙因为如果没数字就无法调用栈顶//也可以提前将v[0]进栈不想改了就这样吧for(int j0;jn;j){while(jnv[j]M.top()){//如果顺序一致就一直出M.pop();j;}if(M.top()v[j]){//如果说发现栈顶比当前数字大那绝对不可能flag0;break;}if (M.top()v[j]){ //如果说栈顶比当前要小那么要把其他的入栈while (nowv[j]){M.push(now);now;if (M.size()m1){//栈满了flag0;break;}}M.pop();}if(flag0)//栈满就出break;}if (flag1)coutYESendl;elsecoutNOendl;}
} L4-202 二叉搜索树的2层结点统计
分数 35 全屏浏览 切换布局
作者 陈越
单位 浙江大学
二叉搜索树或者是一棵空树或者是具有下列性质的二叉树若它的左子树不空则左子树上所有结点的值均小于或等于它的根结点的值若它的右子树不空则右子树上所有结点的值均大于它的根结点的值它的左、右子树也分别为二叉搜索树。
将一系列数字按给定顺序插入一棵初始为空的二叉搜索树你的任务是统计结果树中最下面 2 层的结点数。
输入格式输入在第一行给出一个正整数 N (≤1000)为插入数字的个数。第二行给出 N 个 [−1000,1000] 区间内的整数。数字间以空格分隔。
输出格式在一行中输出最下面 2 层的结点总数。
输入样例9 25 30 42 16 20 20 35 -5 28 输出样例6
//首先我们先确定下思路
//由于最终想要最下面两层的节点总数先想到直接建树然后层序遍历
#includeiostream
#includequeue
using namespace std;
int n;
struct tree {int key;tree *left;tree *right;
};
int vt[1001];
int Max; //记录每层节点数、最深层
queuestruct tree* q; //通过队列遍历每一层的结点
void dfs(tree *root,int depth){if(rootNULL)return;Maxmax(Max, depth);q.push(root);vt[depth];while(q.empty()false){//不为空tree *temp q.front();q.pop();if(temp-left)dfs(temp-left,depth1);if(temp-right)dfs(temp-right,depth1);}
}
tree* insert(tree *root,int key) {if(rootNULL){rootnew(tree);root-keykey;root-leftNULL;root-rightNULL;}else{if(root-keykey){root-rightinsert(root-right,key);}elseroot-leftinsert(root-left,key);}return root;
}
int main(){cinn;int key;tree *rootNULL;for (int i0;in;i){ cinkey;root insert(root, key); //建树}dfs(root,1);coutvt[Max]vt[Max-1];
} L4-203 三足鼎立
分数 35 全屏浏览 切换布局
作者 陈越
单位 浙江大学
当三个国家中的任何两国实力之和都大于第三国的时候这三个国家互相结盟就呈“三足鼎立”之势这种状态是最稳定的。
现已知本国的实力值又给出 n 个其他国家的实力值。我们需要从这 n 个国家中找 2 个结盟以成三足鼎立。有多少种选择呢
输入格式
输入首先在第一行给出 2 个正整数 n2≤n≤105和 P≤109分别为其他国家的个数、以及本国的实力值。随后一行给出 n 个正整数表示n 个其他国家的实力值。每个数值不超过 109数字间以空格分隔。
输出格式
在一行中输出本国结盟选择的个数。
输入样例
7 30
42 16 2 51 92 27 35输出样例
9样例解释
能联合的另外 2 个国家的 9 种选择分别为
{16, 27}, {16, 35}, {16, 42}, {27, 35}, {27, 42}, {27, 51}, {35, 42}, {35, 51}, {42, 51}。
//在这道题没啥好说的暴力看看过不过得了
//很显然啊暴力没办法
//我们可以先排序直接二分
//好抽象啊为什么要用longlong
#includeiostream
#includealgorithm
#includecmath
using namespace std;
int main(){long long n,P;cinnP;long long a[n];for(int i0;in;i){cina[i];}sort(a,an);long long num0;for(int i0;in;i) {int lupper_bound(ai1,an,fabs(P-a[i]))-a;int rlower_bound(ai1,an,Pa[i])-a;num(r-l);}coutnumendl;
} L4-204 盲盒包装流水线
分数 35 全屏浏览 切换布局
作者 陈越
单位 浙江大学
众所周知PAT 有 9 枚徽章分别对应青铜、白银、黄金、白金、钻石、大师、王者、大圣、天神这 9 个段位只有成绩非常优秀的考生才有资格获得刻有自己名字的徽章。现在PAT 制作了徽章的小型纪念版要制成盲盒给大家玩了
下图是一条盲盒包装流水线的示意图。首先徽章通过进货口被压入货栈里空盒在履带上从左向右传送。每次从货栈里弹出一枚徽章进入打包机装入一只空盒打包后继续向右边传送。当货栈为空时打包机会暂停等待下一批徽章压入货栈。 每只盒子都有一个编号小拼姐姐手里有进入流水线的空盒编号顺序表也有每一批送往货栈的徽章顺序表这样她其实可以知道每只盒子里装了哪种徽章。有些小朋友收到了盲盒就想在拆封前问无所不知的小拼姐姐盒子里的徽章是哪一种。但是因为盲盒总量有 105 这么多小拼姐姐可记不住每只盒子里装的是什么于是你就被请来写个程序帮小拼姐姐回复这种信息。
输入格式
输入第一行给出 2 个正整数分别为盲盒总量 N≤105和货栈容量 S≤100。接下来一行给出 N 只盒子的编号编号由 5 位数字组成给出的顺序是空盒进入传送带的顺序。随后 N/S保证是整数行每行给出一批 S 枚徽章的类型为 1-9 的数字给出的顺序是从进货口入栈的顺序。
再下面给出一个正整数 K≤104为查询次数。随后 K 行每行给出一个 5 位编号。
输出格式
对每个查询编号在一行中输出该盒子中装的徽章类型。如果编号是错误的则在一行中输出 Wrong Number。
输入样例
10 5
00132 10093 92001 23333 66666 88888 09009 34658 82750 69251
1 2 3 4 5
9 8 7 6 1
5
66666
88888
69251
55555
10093
输出样例
1
1
9
Wrong Number
4
//这道题也没什么难度
//简单点来讲就是传送带是队列出货口是栈
//我们采用map方式储存简单的很
#includeiostream
#includestack
#includemap
using namespace std;
int main(){mapstring,int m;stackint s;string manghe[100000];int n,S;cinnS;for(int i0;in;i){cinmanghe[i];}int k0;//盲盒下标for(int i0;in/S;i){for(int j0;jS;j){int x;cinx;s.push(x);}for(int j0;jS;j){m[manghe[k]]s.top();s.pop();}}cink;for(int i0;ik;i){string x;cinx;if(m.find(x)!m.end())coutm[x]endl;elsecoutWrong Numberendl;}
} L4-205 浪漫侧影
分数 35 全屏浏览 切换布局
作者 陈越
单位 浙江大学 “侧影”就是从左侧或者右侧去观察物体所看到的内容。例如上图中男生的侧影是从他右侧看过去的样子叫“右视图”女生的侧影是从她左侧看过去的样子叫“左视图”。
520 这个日子还在打比赛的你也就抱着一棵二叉树左看看右看看了……
我们将二叉树的“侧影”定义为从一侧能看到的所有结点从上到下形成的序列。例如下图这棵二叉树其右视图就是 { 1, 2, 3, 4, 5 }左视图就是 { 1, 6, 7, 8, 5 }。 于是让我们首先通过一棵二叉树的中序遍历序列和后序遍历序列构建出一棵树然后你要输出这棵树的左视图和右视图。
输入格式
输入第一行给出一个正整数 N (≤20)为树中的结点个数。随后在两行中先后给出树的中序遍历和后序遍历序列。树中所有键值都不相同其数值大小无关紧要都不超过 int 的范围。
输出格式
第一行输出右视图第二行输出左视图格式如样例所示。
输入样例
8
6 8 7 4 5 1 3 2
8 5 4 7 6 3 2 1
输出样例
R: 1 2 3 4 5
L: 1 6 7 8 5#includestdio.h
#includestdlib.h
typedef struct treenode* node;
struct treenode{int val;node left;node right;
};node gettree(int a[],int b[],int sum){//这边解释一下传入的数组实际上是整个数组的一部分//sum呢是你所求树的节点个数//我们的首要任务是找到每个子树的根节点int i;node bt;if(sum0)return NULL;else{bt(node)malloc(sizeof(struct treenode));bt-vala[sum-1];for(i0;isum;i){if(b[i]a[sum-1])break;}bt-leftgettree(a,b,i);bt-rightgettree(ai,bi1,sum-i-1);}return bt;
}void cengxu1(node BT,int n){//左边if(!BT)return;int len1;int pos;node a[20],b[20];a[0]BT;printf( %d,a[0]-val);while(1){if(len0)return;pos0;for(int i0;ilen;i){if(a[i]-left!NULL)//如果它的左节点不为空就存到b数组里b[pos]a[i]-left;if(a[i]-right!NULL)//如果它的右节点不为空就存到b数组里b[pos]a[i]-right;if(a[i]-rightNULLa[i]-leftNULL)continue;}if(pos!0)printf( %d,b[0]-val);lenpos;//为下一次循环做准备//更新数组走下一次层序for(int i0;ilen;i)a[i]b[i];}
}void cengxu2(node BT,int n){//右边if(!BT)return;int len1;int pos;node a[20],b[20];a[0]BT;printf( %d,a[0]-val);while(1){if(len0)return;pos0;for(int i0;ilen;i){if(a[i]-left!NULL)//如果它的左节点不为空就存到b数组里b[pos]a[i]-left;if(a[i]-right!NULL)//如果它的右节点不为空就存到b数组里b[pos]a[i]-right;if(a[i]-rightNULLa[i]-leftNULL)continue;}if(pos!0)printf( %d,b[pos-1]-val);lenpos;//为下一次循环做准备//更新数组走下一次层序for(int i0;ilen;i)a[i]b[i];}
}int main(){int n;scanf(%d,n);int a[20];//后序int b[20];//先序for(int i0;in;i){scanf(%d,b[i]);}for(int i0;in;i){scanf(%d,a[i]);}node rootgettree(a,b,n);// 树已经构建完毕打印的话其实很简单,层序不就好了//有些时候我觉得自己就是个sbprintf(R:);cengxu2(root,n);printf(\n);printf(L:);cengxu1(root,n);
} 这道题写复杂了大家看个乐呵就好了
L4-301 狼人杀
分数 80 全屏浏览 切换布局
作者 陈越
单位 浙江大学
以下文字摘自《灵机一动·好玩的数学》“狼人杀”游戏分为狼人、好人两大阵营。在一局“狼人杀”游戏中1号玩家说“2号是狼人”2号玩家说“3号是好人”3号玩家说“4号是狼人”4号玩家说“5号是好人”5号玩家说“4号是好人”。已知这5名玩家中有2人扮演狼人角色有2人说的不是实话有狼人撒谎但并不是所有狼人都在撒谎。扮演狼人角色的是哪两号玩家
本题是这个问题的升级版已知 N 名玩家中有 M 人扮演狼人角色有 L 人说的不是实话有狼人撒谎但并不是所有狼人都在撒谎。要求你找出扮演狼人角色的是哪几号玩家
输入格式:
输入在第一行中给出三个正整数 N、M、L其中 5 ≤ N ≤ 1002 ≤ ML N。随后 N 行第 i 行给出第 i 号玩家说的话1 ≤ i ≤ N即一个玩家编号用正号表示好人负号表示狼人。
输出格式:
如果有解在一行中按递减顺序输出 M 个狼人的编号其间以空格分隔行首尾不得有多余空格。如果解不唯一则输出最大序列解 —— 即对于两个序列 A { a[1], ..., a[M] } 和 B { b[1], ..., b[M] }若存在 0 ≤ k M 使得 a[i]b[i] i ≤ k且 a[k1]b[k1]则称序列 A 大于序列 B。若无解则输出 No Solution。
输入样例 1:
5 2 2
-2
3
-4
5
4输出样例 1:
4 1输入样例 2:
6 2 3
-2
3
-4
5
4
-3输出样例 2解不唯一:
6 4输入样例 3:
6 2 5
-2
3
-4
5
4
6输出样例 3:
No Solution
//先写下思路吧首先找出所有组合
//然后对所有组合进行判别模拟主要就是最后判断的时候撒谎的人里必须要有狼人
//且狼人撒谎人数必须要小于等于撒谎总人数并且小于狼人总人数
//由于都走一遍实在是太慢了会有超
//那么我们直接倒着来
//还是会爆
//最后一个办法就是出一个直接判断,不求所有组合数了
//过啦哈哈哈哈哈哈哈哈
#includeiostream
#includecmath
#includevector
#include algorithm
using namespace std;
int ren[120];
int N,M,L;
int flag0;
vectorvectorint result;//用来储存所有组合数
bool check(int a[],int M,vectorint lie){int lang0;for(auto x:lie){if (a[x]-1){lang;}}if(lang0){return false;}else if (langM){return false;}else{return true;}
}void generateCombinations(vectorint combination, int n, int m, int index) {if(flag1)return;if (m 0) {result.push_back(combination);int a[120];for(int i1;iN;i){a[i]1;}vectorint lie;vectorint lang;for (int num : combination) {a[num]-1;lang.push_back(num);}for(int k1;kN;k)if(ren[k]*a[abs(ren[k])]0)lie.push_back(k);if(lie.size()Lcheck(a,M,lie)){for(int i0;ilang.size();i){if(i0)coutlang[i];else{cout lang[i];}}flag1;}return;}for (int i index; i 1; i--) {combination.push_back(i);generateCombinations(combination, n, m - 1, i-1);if(flag1)return ;combination.pop_back();}
}int main(){cinNML;for(int i1;iN;i){cinren[i];}vectorint combination;generateCombinations(combination,N,M,N);if(flag0)coutNo Solution;
} L4-302 拼题A打卡奖励
分数 60 全屏浏览 切换布局
作者 陈越
单位 浙江大学
拼题 A 的教超搞打卡活动指定了 N 张打卡卷第 i 张打卡卷需要 mi 分钟做完完成后可获得 ci 枚奖励的金币。活动规定每张打卡卷最多只能做一次并且不允许提前交卷。活动总时长为 M 分钟。请你算出最多可以赢得多少枚金币
输入格式
输入首先在第一行中给出两个正整数 N≤103 和 M≤365×24×60分别对应打卡卷的数量和以“分钟”为单位的活动总时长不超过一年。随后一行给出 N 张打卡卷要花费的时间 mi≤600最后一行给出 N 张打卡卷对应的奖励金币数量 ci≤30。上述均为正整数一行内的数字以空格分隔。
输出格式
在一行中输出最多可以赢得的金币数量。
输入样例
5 110
70 10 20 50 60
28 1 6 18 22
输出样例
40
样例解释
选择最后两张卷子可以在 5060110 分钟内获得 182240 枚金币。
//这题就是经典的01动归
//但是这题数据太大容易超时
//原本是打算用时间来作为j列但是M太大了
//所以我们选择价值来作为列用最大的价值来求容量
#includeiostream
#includecstring
using namespace std;
const int M365*24*60,N1010;
int a[N],w[N];
int dp[300000];
int main(){memset(dp,0x3f,sizeof(dp));dp[0]0;int n,m,sum 0;cinnm; for(int i1;in;i)cina[i];for(int i1;in;i){cinw[i];sumw[i];}for(int i1;in;i){for(int jsum;jw[i];j--){//简单点来说就是你花的时间越少才有可能拿到更大的利益if(dp[j]dp[j-w[i]]a[i]){dp[j]dp[j-w[i]]a[i];}}}for(int isum;i0;i--){if(dp[i]m){couti;break;}}
}