IT民工
加油!
摘要: 这道题前面做了这么多铺垫,然后给我一个长为N的序列,其中有H个1,剩余的是0,要我们按字典序输出该序列的可重集排列,因为昨天刚学会用C++的库函数,我先用Next_permutation函数写了一遍,代码很简洁。#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>using namespace std;int num[20];int main(){ int T; scanf( "%d", &T); int len, n; while( 阅读全文
posted @ 2012-01-15 19:00 找回失去的 阅读(429) 评论(0) 推荐(0) 编辑
摘要: 这道题先输入N个数字,再输入Q个数字,我先将前N个数字按照升序排序,依然用的是qsort,然后逐个查找Q个数字在排序后的数组中的位置(取靠前的),从1到N,因为数字可能比较多,所以我采用二分查找来节省时间。二分的思想很有用,而且值得注意的是二分的时候不能遗漏了,不然会得到错误的答案。这道题的二分:int bsearch( int x, int y, int v){ int mid; while( x < y) { mid = x + ( y - x) / 2; if( a[mid] >= v) y = mid; else x = mid + 1; } return a[x] == 阅读全文
posted @ 2012-01-15 18:57 找回失去的 阅读(358) 评论(0) 推荐(0) 编辑
摘要: 这道题也是一道染色的题,只有黑、白两种颜色,要求有边的两个点不能染成相同的颜色,我用回溯法做的,判断与cur有边的点是否被染色,如果这些点中有一个点已经被染色,那么cur这点只能染与被染色的点不同的颜色,我们就可以向下一个点搜索。如果cur周围的点没有被染色的话,那么cur这点可以自由地染色,我们可以染成黑色或者白色,分两种情况向下一层搜索,直到将所有的点都染上色。然后计数,看哪种情况染的黑色最多,将其复制到color数组中。#include<cstdio>#include<cstring>#include<cstdlib>#define MAXN 110i 阅读全文
posted @ 2012-01-15 18:56 找回失去的 阅读(311) 评论(0) 推荐(0) 编辑