信息学奥赛一本通T1207

题目:

1207:求最大公约数问题


时间限制: 1000 ms         内存限制: 65536 KB
提交数: 26457     通过数: 16310

【题目描述】

给定两个正整数,求它们的最大公约数。

【输入】

输入一行,包含两个正整数(<1,000,000,000)。

【输出】

输出一个正整数,即这两个正整数的最大公约数。

【输入样例】

6 9

【输出样例】

3

分析一下:

1.枚举:由于数据范围太大,超时。

 

辗转相除法:有两数用大数除以小数,如果余数为零,则较小数为最大公约数

余数不为零时,再用余数与原较小数辗转相除,直到余数为零,输出较小数

不想手写的往下看:

#include<bits/stdc++.h>
using namespace std;
void gcd(int a,int b) 
{
	if(a%b==0||b%a==0)
	{
		cout<<min(a,b);
                return;
	}
	else if(a>b)
	{
		gcd(a%b,b);
	}
	else if(b>a)
	{
		gcd(b%a,a);
	} 
}
int main()
{
	int a,b;
	cin>>a>>b;
	gcd(a,b); 
	return 0;
}

这样写就AC了

### 关于信息学奥赛 T1423 种树问题 T1423 是《信息学奥赛一本》中的经典题目之一,属于贪心算法的应用范畴。该题的核心在于如何过合理的策略最大化满足条件的数量。 #### 贪心算法概述 贪心算法是一种在每一步选择中都采取当前状态下最优的选择,从而希望最终得到全局最优解的方法。对于种树问题而言,其核心思想是优先考虑能够带来最大收益的位置或顺序[^1]。 #### 解决方案分析 以下是解决此问题的具体方法: 1. **输入处理** 输入数据常包括街道长度以及若干棵树的种植位置需求。需要先对这些需求按照某种规则进行排序以便后续计算。一般情况下,可以按所需距离从小到大排列,这样有助于逐步填充空间并减少冲突的可能性。 2. **可行性判断与分配** 使用一个布尔数组来标记哪些位置已经被占用。遍历经过排序后的树木需求列表,在每次迭代过程中尝试找到第一个符合条件(即未被其他树占据且间距合适)的位置放置新树,并更新状态标志位表示该处已被利用。 3. **结果统计** 完成上述操作之后,只需简单计数成功安置了多少棵树木即可得出答案。如果实际数量达到目标数目,则说明方案可行;反之则不可行。 ```python def can_plant_trees(n, c, positions): sorted_positions = sorted(positions) count = 1 # First tree planted at position[0] last_position = sorted_positions[0] for i in range(1, n): current_distance = sorted_positions[i] - last_position if current_distance >= c: count += 1 last_position = sorted_positions[i] if count == len(sorted_positions): # Early termination when all trees are placed. break return count # Example usage of the function with hypothetical values n = 5 # Number of possible planting spots c = 2 # Minimum distance between any two adjacent trees positions = [1, 3, 7, 9, 11] # Possible locations to plant trees result = can_plant_trees(n, c, positions) print(result) # Output should reflect maximum number of trees that could be planted under given constraints ``` 以上代码片段展示了基本逻辑框架,其中`can_plant_trees`函数实现了基于排序和间隔检查的关键部分。 #### 复杂度讨论 时间复杂度主要由两方面构成:一是初始阶段对所有潜在植树地点执行快速排序的时间消耗O(NlogN),二是线性扫描整个序列完成验证过程所花费的成本O(N)。因此整体效率较高,适合大规模数据集下的应用场合。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值