摘要: 题目链接看到题目,没想到有什么好办法,也想到了树状数组,然后二分查找。。。本来感觉复杂度特别高,交了几次超时,然后我发现看别人用相同思路却过了,我写的可能死循环了。不过没查到数据,也可能效率低了。查查白书看看书上代码。while(str < end)//二分找到关键值{ mid = str+(end-str)/2; if(p[mid] == a) break; else if(p[mid] > a) end = mid; else str = mid+1;}此题代码 1 #include <stdio.h> 2 #includ... 阅读全文
posted @ 2012-07-21 20:55 Naix_x 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 题目链接也是很久以前做过的题了,TLE了5次,和前几天做的POJ那个上的题差不多,开两个标记数组,分别记录左右第一个比他小的位置。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 100001 4 __int64 p[N],right[N],left[N]; 5 int main() 6 { 7 int i,n,j; 8 __int64 max; 9 while(scanf("%d",&n)!=EOF)10 {11 if(!n) break;12 max = 0;13 ... 阅读全文
posted @ 2012-07-21 17:24 Naix_x 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 题目链接几个月之前做的一个题了,开始想时就看出应该是个01背包问题,又发现不太一样,貌似应该是有种贪心策略,把最大的挑出来最后还有5块钱的再买,剩下的体积用01背包去求最优选择,当时WA了3次,以为算法有问题,难道用o(n^3)算法吗。。枚举每一种物品然后用01背包的取得的最优解+物品的价值,然后最后找最大的。。感觉复杂度有点高啊。。。然后就放下了,今天又想起来了,搜了下题解,原来是饭卡开始的时候<5 的时候 情况漏了。。。。我晕。。。。 1 #include<stdio.h> 2 #include<string.h> 3 int p[1001],k[1001]; 阅读全文
posted @ 2012-07-21 15:59 Naix_x 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 题目链接本来想练习一下堆排序,试了交了几次发现不是MLE,就是WA。。。发现,直接排序会超内存,用优先队列吧,顺便学习一下。。。下个学期学C++,好好学习STL。这个题可恶的精度,unsigned int 刚刚好。。 1 #include <iostream> 2 #include <cstdio> 3 #include <queue> 4 #include <vector> 5 #include <algorithm> 6 using namespace std; 7 int main() 8 { 9 int n,i;10 long 阅读全文
posted @ 2012-07-21 15:17 Naix_x 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 题目链接今天学习排序,冒泡和选择,无视了。。。直接上堆排序。。 1 #include <stdio.h> 2 #include <string.h> 3 #define N 1000001 4 int p[N],n,m; 5 void heapjust(int x,int len) 6 { 7 int i,num; 8 num = p[x]; 9 for(i = x*2;i <= len;i *= 2)//二叉树的左儿子是2*x右儿子是2*x+110 {11 if(i < len&&p[i] < p[i+1])i ++;//判断左右儿子 阅读全文
posted @ 2012-07-21 11:06 Naix_x 阅读(204) 评论(2) 推荐(0) 编辑