初学ACM - 组合数学基础题目PKU 1833
2015-10-14 00:00
1146 查看
摘要: 这个故事告诉我们,多次调用printf函数都有可能超时...
题目链接:http://poj.org/problem?id=1833
题意说的很清楚,就是找出当前排列后的第k个排列。
很容易的,就能利用STL的next_permulation()函数写出一个答案:
然而提交上去,会提示超时...
有些摸不着头脑,因为网上AC的代码基本也都是调用k次next_permulation写的。
然后看到了这篇文章:Poj 1833 排列 —— 一道水题的凌乱
才明白,原来多次调用printf函数也会超时。。
于是,就一次把它复制到输出缓冲区吧。
这时就AC了,只用了500ms,说明调用printf至少消耗了500ms的时间。不过同样的代码,使用C++模式提交就跑了985ms,几乎是压线跑完。。
Run ID User Problem Result Memory Time Language Code Length Submit Time
14813838 Arclabs001 1833 Accepted 696K 500MS G++ 477B 2015-10-14 17:41:22
14813836 Arclabs001 1833 Accepted 204K 985MS C++ 477B 2015-10-14 17:40:55
题目链接:http://poj.org/problem?id=1833
题意说的很清楚,就是找出当前排列后的第k个排列。
很容易的,就能利用STL的next_permulation()函数写出一个答案:
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int data[1025]; int main(){ int n,k,m; scanf("%d",&m); while(m--) { scanf("%d%d",&n,&k); for(int i=0; i<n; i++) { scanf("%d",&data[i]); } while(k--) next_permutation(data,data+n); for(int i=0; i<n; i++) { printf("%d ",data[i]); } putchar('\n'); } return 0; }
然而提交上去,会提示超时...
有些摸不着头脑,因为网上AC的代码基本也都是调用k次next_permulation写的。
然后看到了这篇文章:Poj 1833 排列 —— 一道水题的凌乱
才明白,原来多次调用printf函数也会超时。。
于是,就一次把它复制到输出缓冲区吧。
#include <iostream> #include <cstdio> #include <iterator> #include <algorithm> using namespace std; int data[1025]; int main() { int n,k,m; scanf("%d",&m); while(m--) { scanf("%d%d",&n,&k); for(int i=0; i<n; i++) { scanf("%d",&data[i]); } while(k--) next_permutation(data,data+n); copy(data,data+n-1,ostream_iterator<int>(cout," ")); cout<<data[n-1]<<endl; } return 0; }
这时就AC了,只用了500ms,说明调用printf至少消耗了500ms的时间。不过同样的代码,使用C++模式提交就跑了985ms,几乎是压线跑完。。
Run ID User Problem Result Memory Time Language Code Length Submit Time
14813838 Arclabs001 1833 Accepted 696K 500MS G++ 477B 2015-10-14 17:41:22
14813836 Arclabs001 1833 Accepted 204K 985MS C++ 477B 2015-10-14 17:40:55
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C++联合体转换成C#结构的实现方法
- C#实现的算24点游戏算法实例分析
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析