蓝桥杯算法训练合集十二 1.比较2.计算最小公倍数3.比赛安排4.潜伏者5.P0702
目录
1.比较
2.计算最小公倍数
3.比赛安排
4.潜伏者
5.P0702
1.比较
问题描述
给出一个n长的数列,再进行m次询问,每次询问询问两个区间[L1,R1],[L2,R2],
询问数列第L2到R2个数字每一个数在数列第L1到R1个数中有多少个数字不大于它。
输入格式
第一行两个整数n,m
第二行n个整数,表示数列。
接下来m行,每行四个整数L1,R1,L2,R2,意义如上
输出格式
m行,每行R2-L2+1个整数,第一个整数表示第L2个数在数列第L1到R1个数中不大于它的个数,第一个整数表示第L2+1个数在数列第L1到R1个数中不大于它的个数,以此类推
样例输入
5 3
5 2 3 4 1
1 2 3 4
2 3 1 5
1 5 2 3
样例输出
1 1
2 1 2 2 0
2 3
数据规模和约定
n,m<=1000,数列的数字非负且小于1000。
示例代码
#include<iostream>
#include<algorithm>
using namespace std;int main() {int n, m, l1, r1, l2, r2, a[1000];cin >> n >> m;for (int i = 0; i < n; i++) {cin >> a[i];}for (int i = 0; i < m; i++) {cin >> l1 >> r1 >> l2 >> r2;int b[1000], c[1000], d[1000], len1, len2;len1 = r1 - l1 + 1;len2 = r2 - l2 + 1;for (int j = 0; j < len1; j++) {//找到l1,r1之间的所有数,放到数组b里b[j] = a[l1 - 1 + j];//cout << b[j] << " ";}// cout << endl;for (int j = 0; j < len2; j++) {//找到l2,r2之间的所有数,放到数组c里c[j] = a[l2 - 1 + j];//cout << c[j] << " ";}//cout << endl;sort(b, b + len1);//b,c从小到大排序sort(c, c + len2);int index = 0;for (int j = 0; j < len2; j++) {//对数组c里的数挨个遍历while (c[j] >= b[index]) {//当找到大于等于c[j]的数,退出循环if (index == len1) {//如果c[j]大于b中所有数break;}index++;//比较下一个b中的数}d[c[j]] = index;//d[m]=n表示数字m的答案是n}for (int j = 0; j < len2; j++) {cout << d[a[l2 - 1 + j]] << " ";}cout << endl;}return 0;
}
2.计算最小公倍数
问题描述
接收用户输入的自然数m,n,计算它们的最小公倍数。
样例输入
4 6
样例输出
12
分析
最小公倍数 * 最大公约数=两个数的乘积
示例代码
#include<iostream>
using namespace std;
int gcd(int a, int b) {return b ? gcd(b, a % b) : a;
}int main() {int a, b;cin >> a >> b;int c = a * b / gcd(a, b);cout << c;return 0;
}
3.比赛安排
问题描述
设有2^n (n≤6)个球队进行单循环比赛,计划在2^n−1天内完成,每个队每天进行一场比赛。设计一个比赛的安排,使在2^n−1天内每个队都与不同的对手比赛。
输入格式
输入共一行,输入n的数值。
输出格式
输出共2^n−1行,第i行输出第i天的比赛安排。
格式为:<i>A-B C-D ……。其中i是天数,A,B分别为比赛双方的编号,每行共2^n−1个比赛场次。
样例输入
2
样例输出
<1>1-2 3-4
<2>1-3 2-4
<3>1-4 2-3
数据规模和约定
1<=n<=4
示例代码
#include<iostream>
using namespace std;
int flag[64][64], day[64];int main() {int n, temp = 1;cin >> n;for (int i = 0; i < n; i++) {temp *= 2;}for (int k = 1; k < temp; k++) {//天数cout << "<" << k << ">";for (int i = 0; i < temp; i++) {if (day[i] == 0) {//如果该球队当天还没打比赛for (int j = 0; j < temp; j++) {if (flag[i][j] == 0 && i != j && day[j] == 0) {//如果i队伍和j没打过比赛day[i] = 1;day[j] = 1;flag[i][j] = 1;cout << i + 1 << "-" << j + 1 << " ";break;}}}}cout << endl;for (int i = 0; i < temp; i++) {day[i] = 0;}}return 0;
}
4.潜伏者
问题描述
R 国和 S 国正陷入战火之中,双方都互派间谍,潜入对方内部,伺机行动。
历尽艰险后,潜伏于 S 国的 R 国间谍小 C 终于摸清了 S 国军用密码的编码规则:
1. S 国军方内部欲发送的原信息经过加密后在网络上发送,原信息的内容与加密后所得的内容均由大写字母‘A’-‘Z’构成(无空格等其他字符)。
2. S 国对于每个字母规定了对应的“密字”。加密的过程就是将原信息中的所有字母替换为其对应的“密字”。
3. 每个字母只对应一个唯一的“密字”,不同的字母对应不同的“密字”。“密字”可以和原字母相同。
例如,若规定‘A’的密字为‘A’,‘B’的密字为‘C’(其他字母及密字略),则原信息“ABA”被加密为“ACA”。
现在,小 C 通过内线掌握了 S 国网络上发送的一条加密信息及其对应的原信息。小 C希望能通过这条信息,破译 S 国的军用密码。小 C 的破译过程是这样的:扫描原信息,对于原信息中的字母 x(代表任一大写字母),找到其在加密信息中的对应大写字母 y,并认为在密码里 y 是 x 的密字。如此进行下去直到停止于如下的某个状态:
1. 所有信息扫描完毕,‘A’-‘Z’ 所有 26 个字母在原信息中均出现过并获得了相应的“密字”。
2. 所有信息扫描完毕,但发现存在某个(或某些)字母在原信息中没有出现。
3. 扫描中发现掌握的信息里有明显的自相矛盾或错误(违反 S 国密码的编码规则)。例如某条信息“XYZ”被翻译为“ABA”就违反了“不同字母对应不同密字”的规则。
在小 C 忙得头昏脑涨之际,R 国司令部又发来电报,要求他翻译另外一条从 S 国刚刚截取到的加密信息。现在请你帮助小 C:通过内线掌握的信息,尝试破译密码。然后利用破译的密码,翻译电报中的加密信息。
输入格式
输入文件名共 3 行,每行为一个长度在 1 到 100 之间的字符串。
第 1 行为小 C 掌握的一条加密信息。
第 2 行为第 1 行的加密信息所对应的原信息。
第 3 行为 R 国司令部要求小 C 翻译的加密信息。
输入数据保证所有字符串仅由大写字母‘A’-‘Z’构成,且第 1 行长度与第 2 行相等。
输出格式
输出文件共 1 行。
若破译密码停止时出现 2,3 两种情况,请你输出“Failed”(不含引号,注意首字母大写,其它小写)。
否则请输出利用密码翻译电报中加密信息后得到的原信息。
输入样例1
AA
AB
EOWIE
输出样例1
Failed
输入输出样例1说明
原信息中的字母‘A’和‘B’对应相同的密字,输出“Failed”。
输入样例2
QWERTYUIOPLKJHGFDSAZXCVBN
ABCDEFGHIJKLMNOPQRSTUVWXY
DSLIEWO
输出样例2
Failed
输入输出样例2说明
字母‘Z’在原信息中没有出现,输出“Failed”。
输入样例3
MSRTZCJKPFLQYVAWBINXUEDGHOOILSMIJFRCOPPQCEUNYDUMPP
YIZSDWAHLNOVFUCERKJXQMGTBPPKOIYKANZWPLLVWMQJFGQYLL
FLSO
输出样例3
NOIP
示例代码
#include<iostream>
using namespace std;int main() {string str1, str2, str3, str4, mima = "aaaaaaaaaaaaaaaaaaaaaaaaaa";int flag[26] = { 0 };cin >> str1 >> str2 >> str3;int len1 = str1.length();int len2 = str3.length();for (int i = 0; i < len1; i++) {if (mima[int(str1[i]) - 65] == 'a') {//如果该字符没有被配对过if (flag[str2[i]] == 1) {//如果是第三种情况cout << "Failed";return 0;}mima[int(str1[i]) - 65] = str2[i];flag[str2[i]] = 1;}else {if ((mima[int(str1[i]) - 65] != str2[i]) ) {//如果是第三种情况//cout << int(str1[i]) - 65<<"SSSSS"<<mima[int(str1[i]) - 65] << " " << str2[i] << endl;//cout << "第三种情况" << endl;cout << "Failed";return 0;}}}for (int i = 0; i < 26; i++) {if (mima[i] == 'a') {//如果是第二种情况//cout << "第二种情况" << endl;cout << "Failed";return 0;}}for (int i = 0; i < len2; i++) {cout << mima[int(str3[i] - 65)];}return 0;
}
5.P0702
问题描述
在C语言中,有一个strcmp函数,其功能是比较两个字符串s1和s2。请编写一个你自己的字符串比较函数my_strcmp,来实现strcmp函数的类似功能。如果s1=s2,则返回0;否则返回s1 与s2 第一个不同字符的差值(如果s1<s2,该差值是一个负数;如果s1>s2,该差值是一个正数)。编写测试程序,输入两个长度小于1000的字符串(可能包含有空格,且长度不一定相等),然后调用my_strcmp函数来进行比较,并输出返回结果。
样例输入
aBcDefgf
aacdef
样例输出
-31
示例代码
#include<iostream>
#include<string.h>
using namespace std;int my_strcmp(char s1[1000],char s2[1000]) {int len1 = strlen(s1);int len2 = strlen(s2);if (len1 < len2) {for (int i = 0; i < len1; i++) {if (s1[i] != s2[i]) {return int(s1[i]) - int(s2[i]);}}return -115;}else if(len1>len2){for (int i = 0; i < len2; i++) {if (s1[i] != s2[i]) {return int(s1[i]) - int(s2[i]);}}return 115;}else {for (int i = 0; i < len2; i++) {if (s1[i] != s2[i]) {return int(s1[i]) - int(s2[i]);}}}return 0;
}
int main() {char s1[1000], s2[1000];gets(s1);gets(s2);cout << my_strcmp(s1, s2);return 0;
}
蓝桥杯算法训练合集十二 1.比较2.计算最小公倍数3.比赛安排4.潜伏者5.P0702相关推荐
- 蓝桥杯算法训练合集十五 1.打翻的闹钟2.智斗锅鸡3.文件列表
目录 1.打翻的闹钟 2.智斗锅鸡 3.文件列表 1.打翻的闹钟 问题描述 冯迭伊曼晚上刷吉米多维奇刷的太勤奋了,几乎天天迟到.崔神为了让VonDieEman改掉迟到的坏毛病,给他买了个闹钟. 一天早 ...
- 蓝桥杯算法训练合集十三 1.P06022.P07033.逗志芃的危机4.唯一的小可爱5.JOE的矩阵
目录 1.P0602 2.P0703 3.逗志芃的危机 4.唯一的傻子 5.JOE的矩阵 1.P0602 问题描述 编写一个程序,输入一个4位的自然数,将组成该数的各位数字重新排列,形成一个最大数和一 ...
- 蓝桥杯算法训练合集三 1.车的位置2.24点3.最大分解4.RP大冒险5.士兵杀敌(二)
目录 1.车的位置(搜索) 2.24点(搜索) 3.最大分解(贪心) 4.RP大冒险 5.士兵杀敌(二) 1.车的位置(搜索) 问题描述 在一个n*n的棋盘中,每个格子中至多放置一个车,且要保证任何两 ...
- 蓝桥杯算法训练合集一 1.印章2.拿金币3.数字游戏4.无聊的逗5.礼物
目录 1.印章(动态规划) 2.拿金币(动态规划) 3.数字游戏(搜索) 4.无聊的逗(状态搜索) 5.礼物(二分法和前缀和) 1.印章(动态规划) 问题描述 共有n种图案的印章,每种图案的出现概率相 ...
- 蓝桥杯算法训练合集八 1.数的划分2.求先序排列3.平方计算4.三角形高5.单词复数
目录 1.数的划分 2.求先序排列 3.平方计算 4.三角形高 5.单词复数 1.数的划分 问题描述 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序). 例如:n=7,k=3,下面三种 ...
- 蓝桥杯算法训练合集四 1.p0802 2.A的B的C次方次方 3.出现次数最多的整数 4.成绩分级 5.台阶问题
目录 1.p0802 2.A的B的C次方次方 3.出现次数最多的整数 4.成绩分级 5.台阶问题 1.p0802 问题描述 编写一个字符串表达式求解函数int expression(char* s); ...
- 蓝桥杯算法训练合集十七 1.数字反转2.试题39713.矮人采金子4.筛法5.机器指令
目录 1.数字反转 2.试题3971 3.矮人采金子 4.筛法 5.机器指令 1.数字反转 问题描述 给定一个整数,请将该数各个位上数字反转得到一个新数.新数也应满足整数的常见形式,即除非给定的原数为 ...
- 蓝桥杯 算法训练 印章
蓝桥杯 算法训练 印章 共有n种图案的印章,每种图案的出现概率相同.小A买了m张印章,求小A集齐n种印章的概率. 输入输出: 一行两个正整数n和m 一个实数P表示答案,保留4位小数. 样例: 2 3 ...
- 蓝桥杯算法训练 印章
蓝桥杯 算法训练 印章 问题描述 共有n种图案的印章,每种图案的出现概率相同.小A买了m张印章,求小A集齐n种印章的概率. 输入格式 一行两个正整数n和m 输出格式 一个实数P表示答案,保 ...
最新文章
- python设计一个学生类求最高分_设计一个学生类班级类
- 将下图的nfa确定化为dfa_作业8 非确定的自动机NFA确定化为DFA
- linux web 共享文件夹,KodExplorer 3.2外链支持,文件夹共享,Web在线文件管理
- CentOS yum安装MySQL5.7.20
- Nginx_负载均衡配置讲解
- 在php中使用sockets:从新闻组中获取文章
- 1、【转载】Python yield 使用浅析
- Flask知识点查阅
- Comcast Xfinity家庭安全系统被曝严重漏洞
- 06Matplotlib数据可视化--6.1绘图基础
- SQLServer复制需要有实际的服务器名称才能连接到服务器,请指定实际的服务器名转...
- CentOS 6.6 nginx PHP 配置
- 三星android se,安卓小钢炮小米8 SE初体验!华为三星靠边站
- 软件质量需要静态代码分析和动态测试
- 将图片转化成RGB格式
- 移远M26,三分钟打通TCP流程,AT指令详解
- MAC电脑实现微信多开
- 抓取整个网站图片的爬虫
- iptables配置SNAT实现共享上网
- CentOS系统服务器加固,Centos7 安全加固