上计会青少年算法竞赛3月月赛

这篇博客详细解析了3月月赛丙组的算法竞赛题目,包括打鱼还是晒网、数字加密、双质数、连乘问题和救援争先等。针对每个问题,博主提供了解题思路和关键技巧,如判断质数的方法、如何优化连乘问题的计算等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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^52105。判断质数的代码时间复杂度是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 \%10000a1a2a3...an%10000,再除以aia_ia
<think>好的,我需要帮助用户获取关于第二届上海市青少年算法竞赛现场T4题目的解决方案。首先,用户提到了两个参考引用,分别是上海计算机学会12的丙组解题报告和上海市青少年算法2023年8的丙组题目。不过,用户的问题是关于第二届现场的T4题目,但提供的引用可能并不直接相关。 接下来,我需要检查用户提供的引用内容是否有帮助。引用[1]提到了辗转相除法求最大公约数的时间复杂度,这可能与某个T4题目相关,但不确定是否与用户询问的具体题目有关。引用[2]则是关于方格路径的动态规划问题,这可能属于另一类型的题目。因此,可能需要更具体的信息来确定T4题目的内容。 由于用户没有提供具体的题目描述,我需要考虑可能的解决方法。首先,建议用户提供题目的大致内容或关键条件,比如题目涉及的问题类型(如动态规划、图论、数学问题等)、输入输出样例或题目要求。如果用户无法提供更多细节,可以基于常见的竞赛题型给出一般性的解题策略,例如分析时间复杂度、使用递归或动态规划方法,或者应用特定的算法如Dijkstra、BFS等。 此外,考虑到上海市青少年算法竞赛的丙组题目通常涉及基础算法和数据结构,T4可能属于中等难度的问题。例如,可能的题目类型包括最短路径问题、贪心算法、深度优先搜索优化等。根据引用中提到的辗转相除法和方格路径问题,可以推测T4可能涉及数学建模或路径计数问题,需要进一步确认。 为了有效帮助用户,我应该建议他们提供更多题目细节,或者根据已有信息推测可能的解题方向。如果无法获取具体题目内容,可以给出一般性的解题步骤,如问题分析、选择合适的数据结构、设计算法、处理边界条件等,并结合类似题目的解决方案进行说明。</think>根据现有信息,关于第二届上海市青少年算法竞赛现场T4题目的具体内容尚未公开可查。不过结合上海市青少年算法竞赛的命题特点及已有参考资料,我为您整理以下通用解题思路和同类题型分析方法: --- ### **典型丙组T4题型的解题框架** 1. **问题特征识别** - 常涉及动态规划(如网格路径计数)、数学建模(如公约数相关计算)或图论算法 - 数据规模通常在$10^3$量级,需注意时间复杂度的控制 2. **通用解题步骤** - **输入特征分析**:识别关键约束条件(如引用[2]中的墙障碍物限制) - **状态转移建模**:对于网格类问题常用$dp[i][j]$表示到达$(i,j)$的方案数 - **边界条件处理**:如初始位置方案数为1,障碍物位置方案数强制为0 3. **代码实现要点** ```python MOD = 10**9+7 n, m = map(int, input().split()) grid = [input().strip() for _ in range(n)] dp = [[0]*m for _ in range(n)] dp[0][0] = 1 if grid[0][0] == '.' else 0 for i in range(n): for j in range(m): if grid[i][j] == '#': continue if i > 0: dp[i][j] += dp[i-1][j] if j > 0: dp[i][j] += dp[i][j-1] dp[i][j] %= MOD print(dp[-1][-1]) ``` --- ### **同类题型拓展分析** 参考[^2]中网格路径题的解法: 1. **动态规划核心**:$$dp[i][j] = (dp[i-1][j] + dp[i][j-1}) \mod (10^9+7)$$ 2. **障碍物处理**:当遇到`#`时直接跳过状态转移 3. **空间优化技巧**:可使用滚动数组降低空间复杂度 --- ### **获取指定题目详情的建议** 1. 联系上海市计算机学会竞赛部咨询历史题 2. 访问学会官网查看往届事公告 3. 关注官方发布的解题报告(如引用[1]的格式) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值