B3834 [GESP202303 一级] 长方形面积

文章讨论了如何将一个暴力枚举长方形边的O(n^2)算法优化为O(n),通过仅枚举一条边,利用面积整除条件来减少计算。作者分享了C++代码并表示自己是新手,欢迎提问指导。

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


链接

题目链接放在开头

思路

没有什么可讲的,就是一个优化需要讲一下

从O(n2)优化到O(n)

在暴力枚举长方形的边时,只需要枚举一条边,另一条边用面积模枚举出来的一条边如果可以整除,那么计数器加一

如果有问题就在评论区里问我,或者私信我就好了,我真不知道这道题要怎么讲,看到会及时回答哒

代码

#include <bits/stdc++.h>
using namespace std;

int main() 
{
	/*关闭cin cout同步留,如果不想写这么长,可以选择用scanf printf作为输入输出*/ 
	std::ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0); 
	/*S为长方形的面积,cnt是计数器,记录有多少个符合条件的长方形*/
	int S,cnt = 0;
	cin >> S;
	/*最暴力的办法是把两边全部枚举,时间复杂度:O(n2),优化就是只枚举一条边,另一条边用面积判断*/ 
	for(int i = 1;i * i <= S;i ++) if(S % i == 0) cnt ++;
	cout << cnt << '\n';
	return 0;
}

PS:我是新手,谢谢指点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值