杭电第三场水题1007

本文介绍了一种通过编程解决数学问题的方法:给定一个整数n,寻找两个正整数a和b,使得a+b等于n且a和b的最小公倍数(LCM)达到最大值。该问题通过逐步减小n/2的值直至找到两个数没有公约数来解决。

The Unsolvable Problem

给出n,求满足a+b=n,a和b最小公倍数的最大值是多少...

把n取半,看拆分的两半有木有公约数...

#include <cstdio>
#include <iostream>
using namespace std;
int gcd(int a,int b)
{
	return (b==0?a:gcd(b,a%b));
}
int main()
{
	int n,T;
	scanf("%d",&T);
	while (T--)
	{
		scanf("%lld",&n);
		__int64 k=n/2;
		__int64 s;
		while (gcd(k,(n-k))!=1) k--;
		s=k*(n-k);
		printf("%I64d\n",s);
	}
	return 0;
} 


 

### 杭州电子科技大学春季程序设计竞赛第三场目与解析 关于杭州电子科技大学(HDU)举办的春季程序设计竞赛,通常会涉及一系列经典的算法问。这类比赛旨在考察参赛者的编程能力和算法思维能力[^1]。 #### 目概述 杭电的春季赛往往围绕基础数据结构和经典算法展开,以下是可能涉及到的一些典型目类别及其对应的解决思路: 1. **快速排序优化** 快速排序是一种高效的排序方法,在实际应用中可以通过多种方式进行性能提升。例如采用三路划分法来减少相同键值元素带来的额外开销,或者通过随机化选取枢轴降低最坏情况发生的概率[^2]。 ```python import random def quicksort_three_way(arr, low, high): if low >= high: return lt = low # 小于区域指针 gt = high # 大于区域指针 i = low + 1 pivot = arr[low] while i <= gt: if arr[i] < pivot: arr[lt], arr[i] = arr[i], arr[lt] lt += 1 i += 1 elif arr[i] > pivot: arr[gt], arr[i] = arr[i], arr[gt] gt -= 1 else: i += 1 quicksort_three_way(arr, low, lt - 1) quicksort_three_way(arr, gt + 1, high) ``` 2. **查集的应用** 查集作为一种高效的数据结构,常用于处理动态连通性问。其核心操作包括查找集合根节点以及按秩合两个集合以保持树的高度较低。 3. **字符串匹配与处理** 字符串问是许多在线评测平台上的常见考点之一。KMP算法因其线性的复杂度成为了解决此类问的理想工具[^3]。 4. **图论相关问** 图论部分可能会涵盖最短路径计算(Dijkstra/Floyd-Warshall),最小生成树构建(Prim/Kruskal)等内容。 #### 解技巧分享 针对上述提到的各种类型的问,建议采取如下策略: - 对于排序类问除了掌握基本原理外还需熟悉各类变体; - 学习实现标准库函数背后的工作机制有助于加深理解; - 掌握常用的设计模式能够帮助更好地组织代码逻辑; #### 总结 虽然具体到某一年某一场比赛的确切试无法直接给出,但从历年经验来看无非就是围绕这些重点知识点命而已。因此只要平时多加练习巩固基础知识就完全可以应对类似的挑战了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值