sicily 1218纪念邮票
2013-12-26 23:57
253 查看
题意要求为输入n,m两个数,求解在1-n内满足连续和为m的区间。
设区间的端点为a,b。我觉得亮点一是利用c=b-a,这样可以将循环从两个变成一个,时间复杂度大大减小。亮点二是使用了STL库中的map,将结果储存在map中,然后输出。
for循环中判断条件是最重要的,其他很简单了。
设区间的端点为a,b。我觉得亮点一是利用c=b-a,这样可以将循环从两个变成一个,时间复杂度大大减小。亮点二是使用了STL库中的map,将结果储存在map中,然后输出。
for循环中判断条件是最重要的,其他很简单了。
#include<stdio.h> #include<map> using namespace std; int main() { int n, m, c, a; map<int, int>stamp; map<int, int>::iterator it; scanf("%d %d", &n, &m); // 因为c=b-a,[a,b]区间的和为(b-a+1)(b+a)/2 = m即为(2a+c)(c+1)=2m for (c = 0 ; c * c < 2 * m ; c++) { if (2 * m % (c + 1) == 0 // 保证a为整数 && 2 * m / (c + 1) - c != 0 // 保证a不为0 && ((2 * m)/ (c+1) - c ) % 2 == 0) { // 保证2*a是偶数 a = (2 * m / (c + 1) - c) / 2; if (a + c <= n) stamp.insert(pair<int, int>(a, a+c)); } } for (it = stamp.begin() ; it != stamp.end() ; it++) { printf("[%d,%d]\n", it->first, it->second); } return 0; }
相关文章推荐
- Less函数说明
- js获取url参数
- Less函数说明
- cc150 分析与解答源码
- sql join 初步理解
- 关于产品层次
- 双机热备+负载均衡(Heartbeat+DRBD+NFS+Keepalived+Lnmp)线上方案
- C#通过Web获取客户端的IP与Mac地址实现
- struts2 s:if标签以及 #,%{},%{#}的使用方法等在资料整理
- 逼近二值图边界点
- mysql的锁表问题
- 视频电话/视频会议之关键帧请求处理
- C++ static用途
- wmi文章地址
- Less语言特性
- Oracle优化Java字符串内部表示
- git tag操作教程
- Mysql分页查询通用存储过程 - 阿影的黄金时代 - 博客频道 - CSDN.NET
- Python使用Tkinter错误,NameError: global name 'TOP' is not defined
- 【OpenCV】提取图片某一块