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​​=ai​a1​∗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​​=ai​a1​∗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月月赛相关推荐

  1. 上海青少年算法竞赛-6月月赛参考代码

    T1 #include <iostream> using namespace std;int main() {int n;cin >> n;int a = 1;//初始化,0刀 ...

  2. 第三届上海市青少年算法竞赛题解

    第三届上海市青少年算法竞赛题解 T1 数洞洞 #include<bits/stdc++.h> using namespace std; int a[11]={0,1,0,0,0,1,0,1 ...

  3. 重磅!DataFountain新上两项CV算法竞赛-32万巨奖等你来拿!

    点击我爱计算机视觉标星,更快获取CVML新技术 这几日,计算机视觉的算法竞赛突然冒出来许多,昨天52CV报道过今日头条新出算法大赛!短视频内容理解与推荐竞赛 ,不少朋友直呼玩不起,少则百万多则上亿的数 ...

  4. DataFountain新上两项CV算法竞赛(文化传承——汉字书法多场景识别、大数据医疗——肝癌影像AI诊断)——50万巨奖等你来拿!

    欢迎关注微信公众号[计算机视觉联盟] 获取更多前沿AI.CV资讯 好消息啦,2019数字中国创新大赛最后四道赛题如期揭幕,其中又有两道计算机视觉赛题,每题均设立16万巨奖,是不是很激动,让我们一起来看 ...

  5. 第四届上海市青少年算法竞赛(小学组)线上同步赛 T3 连环画

    题目描述 有一套正在连载的连环画.一开始,小爱只有其中的 n 本画册,它们在连环画中的序号分别为 a1​,a2​,-,an​.这些画册不到整部漫画的一半,也就是说,连环画的画数是超过 2×n 的. 小 ...

  6. 上海市青少年算法月赛丙组—目录汇总

    上海市青少年算法2023年6月月赛(丙组) T1 差分求和 T2 二进制异或 T3 颜文字 T4 选取子段(二) T5 观光单车 ​​​​​​​上海市青少年算法2023年5月月赛(丙组) T1 三角形 ...

  7. 在线计算机 授课,在线计算机教育网站计蒜客改版 推出算法竞赛课程

    [赛迪网讯]4月16日消息,近日,新型在线计算教育平台计蒜客进行了重大改版,网站从底层架构到课程内容都进行了大幅调整.计蒜客新版除了服务速度和稳定性大幅提升外,还对用户的学习体验进行了优化:同时,计蒜 ...

  8. 2021年6月组会分享--算法竞赛入门及背包问题解析

    一 竞赛简介 万恶之源 各种竞赛知识的汇总. 1. 赛制介绍 赛制介绍 2. 平台介绍 leetcode 主找工作,周赛/双周赛,每周都有,时间短,可查看别人的代码,学习别人的优秀代码和解题思路,成长 ...

  9. 泰安机器人比赛_泰安学子在省青少年机器人竞赛上揽8个一等奖

    5月24至26日,第19届山东省青少年机器人竞赛在威海市文登区成功举办.经过紧张激烈的角逐,本次大赛泰安市代表队共获得一等奖8个,二等奖11个,其中肥城市第一中学参赛队获得高中创意组一等奖并取得国赛参 ...

最新文章

  1. python 播放视频 ftp_利用 Python 实现文件自动备份到 ftp 服务器
  2. spring配置文件中非bean标签的原理解析
  3. linux文件删除机制,Linux 文件删除机制
  4. 华为 原生android 6.0,安卓6.0原生桌面轻体验,我的手机从未如此流畅过
  5. 设计模式:单一职责原则
  6. django-编辑功能
  7. VS如何在一个项目中添加多个包含main函数的源文件并分别调试运行
  8. mysql where 大小写_java – 使用select where where Mysql在Mysql中区分大小写
  9. SystemCenter2012SP1实践(12)服务器、网络和存储配置
  10. exchange邮箱账号禁用之后 启用方法
  11. OCTO-RPC集成 Thrift 0.11.0
  12. AVI视频怎么转换成MOV视频
  13. 公差带与配合 常用基孔(轴)制基准公差数值
  14. CPU飙高和内存飙高等等的一般处理步骤
  15. python量化交易第三章
  16. 一个STAF的RC21的问题的解决和思考
  17. 核心业务2:借款人申请借款额度
  18. 怕麻烦的人,过不了好生活,好真实
  19. Unity+NGUI性能优化方法总结
  20. 海康SDK的NET_DVR_GET_FTPCFG_V40

热门文章

  1. 匆匆那年—2014年终总结
  2. 机器学习实战——3.1 决策树的构造
  3. Linux 版本查询常用命令
  4. FILTER的使用与过滤器实现session登录案例
  5. Spring boot + Sharding JDBC 分库分表 及 分布式事务处理
  6. 90个优秀外国英文网站强力推荐
  7. U盘文件找不到了?莫慌!!!
  8. 打开一个英文文本文件,编写程序读取内容,将其中的小写字母转换为大写,大写字母转化为小写
  9. 如何实现罗克韦尔PLC AB1756的远程监控数据采集?
  10. 给你一个杯子,你如何测试