poj2100尺取法
来源:互联网 发布:诺基亚n96软件 编辑:程序博客网 时间:2024/04/28 19:39
题意:
分解整数,将一个整数分解成多个数的平方和;
理解:
开始我以为可以暴力枚举,然后发现n是1e14次方;
过不了,然后翻书发现是尺取法;
就用尺取法写了;
但是报了我一个超空间...
随后算了下空间...果然用了1e7个longlong的字节;
然后想啊....
最后受大神影响,发现可以不用数组...
结果只用了180k...
代码如下:
#include <cstdio>#include <algorithm>#include <vector>using namespace std;typedef long long ll;typedef pair<int, int> pii;#define x first#define y secondll n;vector<pii> v_a;void search(){ ll sum = 0, j = 1, i = 1; while (i * i <= n && j * j <= n) { while (sum < n && i * i <= n) { sum += i * i; ++i; } while (sum > n) { sum -= j * j; ++j; } if (sum == n) { v_a.push_back(pii(j, i - j)); sum -= j * j; ++j; } }}bool cmp(pii p1, pii p2){ return p1.x > p2.x;}int main(){ scanf("%lld", &n); search(); printf("%d\n", v_a.size()); sort(v_a.begin(), v_a.end(), cmp); for (int i = v_a.size() - 1; i >= 0; --i) { printf("%d ", v_a[i].y); for (int j = v_a[i].x; j < v_a[i].x + v_a[i].y; ++j) printf("%d ", j); printf("\n"); } return 0;}
0 0
- poj2100尺取法
- POJ2100-Graveyard Design【尺取法】
- poj2100 Graveyard Design 尺取法
- POJ2100 Graveyard Design【尺取法】
- (尺取法)poj2100,Graveyard Design
- 尺取法入门2 poj2100 Graveyard Design
- poj2100
- poj2100(尺取模型,总结)
- 尺取法
- 尺取法
- 尺取法
- 尺取法
- 尺取法
- 尺取法
- 尺取法
- 尺取法
- 【尺取法】
- 尺取法
- install Adobe Reader on Ubuntu
- 属性动画(property animation) &重复执行
- HDFS源码分析(五)-----节点注册与心跳机制
- HDFS源码分析(六)-----租约
- NSData 与 NSMutableData
- poj2100尺取法
- Swift语法备注
- JVM参数优化
- Hadoop Balancer源码解读
- Ext.form.Checkbox
- androidRSA加密,java解密出现错误或者乱码
- Partitioner分区过程分析
- CSS选择器的权重与优先规则
- HDFS源码分析(二)-----元数据备份机制