上计会青少年算法竞赛3月月赛
3月月赛丙组题 https://iai.sh.cn/contest/3
打鱼还是晒网
5天一个周期,如果 n 除以5的余数是4或者0,就是晒网;否则就是打鱼
注意:任何正整数除以 r 的余数的范围是 0 ~ (r-1)
#include <iostream>
using namespace std;int main() {int n;cin >> n;if (n%5==0 || n%5==4) cout << "Lying" << endl;else cout << "Fishing" << endl;return 0;
}
数字加密
- 这题方法很多,可以把输入当做一个整型变量,也可以把输入当做字符串
整型变量
#include <iostream>
using namespace std;int main() {int n;cin >> n;cout << 9 - n%10;cout << 9 - n/10%10;cout << 9 - n/100%10;cout << 9 - n/1000;return 0;
}
字符数组
#include <iostream>
using namespace std;int main() {char c[4];cin >> c;for (int i = 3; i >= 0; i--) {c[i] = char('0' + '9' - c[i]);cout << c[i]; }return 0;
}
双质数
- 没什么好说的,判断质数的模板题。一定要把判断质数的函数熟练默写出来
- 主程序要枚举的数字不超过2∗1052*10^52∗105。判断质数的代码时间复杂度是O(n)O(\sqrt{n})O(n),表面上看会超时,但大部分数字是合数,很快就会找出因子,函数中实际循环次数很少
- 掌握这道题里布尔变量的用法:
- 设置布尔变量 flag,并初始化为“真”
- 在循环过程中,如果某条件成立,则将 flag 修改为“假”
- 循环结束后,如果 flag 仍然为假,就说明循环里的条件没有成立过
#include <iostream>
using namespace std;bool isPrime(int x) {if (x < 2) return false;for (int i = 2; i <= x/i; i ++ ) {if (x % i == 0) {return false;}}return true;
}int main() {int a, b;cin >> a >> b;bool flag = true;for (int i = a; i <= b; i ++ ) {if (isPrime(i) && isPrime(i/10)) {flag = false;cout << i << endl;}}if (flag) cout << "None" << endl;return 0;
}
连乘问题
- 很多同学会先用循环计算a1∗a2∗a3...an%10000a_1*a_2*a_3...a_n \%10000a1∗a2∗a3...an%10000,再除以aia_iai,这样计算的结果是不对的,我们来看下面的例子
- 123∗45612%10000=4674\displaystyle\frac{123*456}{12}\%10000=467412123∗456%10000=4674
- 123∗456%1000012=507\displaystyle\frac{123*456\%10000}{12}=50712123∗456%10000=507
- 观察下式,我们可以得出第一个方法:
- 从第1项循环到第i−1项从第1项循环到第i-1项从第1项循环到第i−1项
- 再从第i+1项循环到第n再从第i+1项循环到第n再从第i+1项循环到第n项
- 由于题目要计算A1到An,时间复杂度是O(n2)由于题目要计算A_1到A_n,时间复杂度是O(n^2)由于题目要计算A1到An,时间复杂度是O(n2),适用于前60%的数据,该代码可以得到60分
Ai=a1∗a2∗...∗anai%10000=(a1∗a2∗...∗ai−1)∗(ai+1∗ai+2∗...∗an)%10000\begin{aligned} A_i &=\frac{a_1*a_2*...*a_n}{a_i}\%10000\\ &=(a_1*a_2*...*a_{i-1})*(a_{i+1}*a_{i+2}*...*a_n)\%10000 \\ \end{aligned} Ai=aia1∗a2∗...∗an%10000=(a1∗a2∗...∗ai−1)∗(ai+1∗ai+2∗...∗an)%10000
#include <cstdio>
#include <iostream>
using namespace std;const int N = 1e5+10, mod = 1e4;
int n, a[N];int main() {cin >> n;for (int i = 1; i <= n; i ++ ) {cin >> a[i];}for (int i = 1; i <= n; i ++ ) {int ans = 1;for (int j = 1; j < i; j ++ ) {ans = (ans * a[j]) % mod;}for (int j = i + 1; j <= n; j ++ ) {ans = (ans * a[j]) % mod;}cout << ans << endl;}return 0;
}
- 对于另外40%的数据,n的上限是105n的上限是10^5n的上限是105,不能用嵌套循环求解;我们可以预处理出前缀积与后缀积,再通过前缀积与后缀积计算A1到AnA_1到A_nA1到An,时间复杂度是O(n)O(n)O(n),可以得到满分代码
- 前缀积的第i项:front[i]=front[i−1]∗a[i]前缀积的第i项:front[i] = front[i-1]*a[i]前缀积的第i项:front[i]=front[i−1]∗a[i]
- 后缀积的第i项:back[i]=back[i+1]∗a[i]后缀积的第i项:back[i] = back[i+1]*a[i]后缀积的第i项:back[i]=back[i+1]∗a[i]
- 例如数列3 1 4 1 5 9 2 6中
– 前缀积:3,3,12,12,60,540,1080,6480
– 后缀积:6480,2160,2160,540,540,108,12,6
Ai=a1∗a2∗...∗anai%10000=(a1∗a2∗...∗ai−1)∗(ai+1∗ai+2∗...∗an)%10000=front[i−1]∗back[i+1]%10000\begin{aligned} A_i &=\frac{a_1*a_2*...*a_n}{a_i}\%10000\\ &=(a_1*a_2*...*a_{i-1})*(a_{i+1}*a_{i+2}*...*a_n)\%10000 \\ &=front[i-1] * back[i+1] \% 10000\\ \end{aligned} Ai=aia1∗a2∗...∗an%10000=(a1∗a2∗...∗ai−1)∗(ai+1∗ai+2∗...∗an)%10000=front[i−1]∗back[i+1]%10000
#include <cstdio>
#include <iostream>
using namespace std;const int N = 1e5+10, mod = 1e4;
int n, a[N], front[N], back[N];int main() {cin >> n;for (int i = 1; i <= n; i ++ ) {cin >> a[i];}front[0] = 1;for (int i = 1; i <= n; i ++ ) {front[i] = (front[i-1] * a[i]) % mod;}back[n+1] = 1;for (int i = n; i >= 1; i -- ) {back[i] = (back[i+1] * a[i]) % mod;}for (int i = 1; i <= n; i ++ ) {int ans = 1;ans = front[i-1] * back[i+1] % mod;cout << ans << endl;}return 0;
}
救援争先
- 把出发时间和到达时间转化为距离00:00的分钟数,接下来排序就可以了
- 未学过结构体和sort函数的同学看这段代码
#include <cstdio>
#include <iostream>
using namespace std;int n, depart[1005], arrive[1005], id[1005];int main() {cin >> n;int x, y;char ch;for (int i = 1; i <= n; i ++ ) {cin >> x >> ch >> y;depart[i] = x * 60 + y;cin >> x >> ch >> y;arrive[i] = depart[i] + x * 60 + y;id[i] = i;}for (int i = 1; i < n; i ++ ) {int k = i;for (int j = k + 1; j <= n; j ++ ) {if (arrive[j] < arrive[k]) k = j;else if (arrive[j] == arrive[k]) {if (depart[j] < depart[k]) k = j;else if (depart[j] == depart[k]) {if (id[j] < id[k]) k = j;}}}swap(depart[k], depart[i]);swap(arrive[k], arrive[i]);swap(id[k], id[i]);}for (int i = 1; i <= n; i ++ ) cout << id[i] << endl;return 0;
}
- 学过结构体和sort函数的同学看这段代码
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;int n;
struct team{int depart, arrive, id;
}t[1005];bool cmp(team a, team b) {if (a.arrive < b.arrive) return true;if (a.arrive == b.arrive) {if (a.depart < b.depart) return true;if (a.depart == b.depart) {if (a.id < b.id) return true; }}return false;
}int main() {cin >> n;int x, y;char ch;for (int i = 1; i <= n; i ++ ) {cin >> x >> ch >> y;t[i].depart = x * 60 + y;cin >> x >> ch >> y;t[i].arrive = t[i].depart + x * 60 + y;t[i].id = i;}sort(t+1, t+1+n, cmp);for (int i = 1; i <= n; i ++ ) cout << t[i].id << endl;return 0;
}
上计会青少年算法竞赛3月月赛相关推荐
- 上海青少年算法竞赛-6月月赛参考代码
T1 #include <iostream> using namespace std;int main() {int n;cin >> n;int a = 1;//初始化,0刀 ...
- 第三届上海市青少年算法竞赛题解
第三届上海市青少年算法竞赛题解 T1 数洞洞 #include<bits/stdc++.h> using namespace std; int a[11]={0,1,0,0,0,1,0,1 ...
- 重磅!DataFountain新上两项CV算法竞赛-32万巨奖等你来拿!
点击我爱计算机视觉标星,更快获取CVML新技术 这几日,计算机视觉的算法竞赛突然冒出来许多,昨天52CV报道过今日头条新出算法大赛!短视频内容理解与推荐竞赛 ,不少朋友直呼玩不起,少则百万多则上亿的数 ...
- DataFountain新上两项CV算法竞赛(文化传承——汉字书法多场景识别、大数据医疗——肝癌影像AI诊断)——50万巨奖等你来拿!
欢迎关注微信公众号[计算机视觉联盟] 获取更多前沿AI.CV资讯 好消息啦,2019数字中国创新大赛最后四道赛题如期揭幕,其中又有两道计算机视觉赛题,每题均设立16万巨奖,是不是很激动,让我们一起来看 ...
- 第四届上海市青少年算法竞赛(小学组)线上同步赛 T3 连环画
题目描述 有一套正在连载的连环画.一开始,小爱只有其中的 n 本画册,它们在连环画中的序号分别为 a1,a2,-,an.这些画册不到整部漫画的一半,也就是说,连环画的画数是超过 2×n 的. 小 ...
- 上海市青少年算法月赛丙组—目录汇总
上海市青少年算法2023年6月月赛(丙组) T1 差分求和 T2 二进制异或 T3 颜文字 T4 选取子段(二) T5 观光单车 上海市青少年算法2023年5月月赛(丙组) T1 三角形 ...
- 在线计算机 授课,在线计算机教育网站计蒜客改版 推出算法竞赛课程
[赛迪网讯]4月16日消息,近日,新型在线计算教育平台计蒜客进行了重大改版,网站从底层架构到课程内容都进行了大幅调整.计蒜客新版除了服务速度和稳定性大幅提升外,还对用户的学习体验进行了优化:同时,计蒜 ...
- 2021年6月组会分享--算法竞赛入门及背包问题解析
一 竞赛简介 万恶之源 各种竞赛知识的汇总. 1. 赛制介绍 赛制介绍 2. 平台介绍 leetcode 主找工作,周赛/双周赛,每周都有,时间短,可查看别人的代码,学习别人的优秀代码和解题思路,成长 ...
- 泰安机器人比赛_泰安学子在省青少年机器人竞赛上揽8个一等奖
5月24至26日,第19届山东省青少年机器人竞赛在威海市文登区成功举办.经过紧张激烈的角逐,本次大赛泰安市代表队共获得一等奖8个,二等奖11个,其中肥城市第一中学参赛队获得高中创意组一等奖并取得国赛参 ...
最新文章
- python 播放视频 ftp_利用 Python 实现文件自动备份到 ftp 服务器
- spring配置文件中非bean标签的原理解析
- linux文件删除机制,Linux 文件删除机制
- 华为 原生android 6.0,安卓6.0原生桌面轻体验,我的手机从未如此流畅过
- 设计模式:单一职责原则
- django-编辑功能
- VS如何在一个项目中添加多个包含main函数的源文件并分别调试运行
- mysql where 大小写_java – 使用select where where Mysql在Mysql中区分大小写
- SystemCenter2012SP1实践(12)服务器、网络和存储配置
- exchange邮箱账号禁用之后 启用方法
- OCTO-RPC集成 Thrift 0.11.0
- AVI视频怎么转换成MOV视频
- 公差带与配合 常用基孔(轴)制基准公差数值
- CPU飙高和内存飙高等等的一般处理步骤
- python量化交易第三章
- 一个STAF的RC21的问题的解决和思考
- 核心业务2:借款人申请借款额度
- 怕麻烦的人,过不了好生活,好真实
- Unity+NGUI性能优化方法总结
- 海康SDK的NET_DVR_GET_FTPCFG_V40