重点回顾
文章平均质量分 64
Matrix1254
爱代码,爱加班,爱咖啡可乐
爱挑战,爱钻研,爱打游戏
爱晚起,也爱工作到深夜。
我擅长技术,崇尚简单和懒惰
我神秘而孤僻,沉默而爱憎分明
我行我素,我是程序员
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
hdu 1856 More is better (究级版)
简单题,列出最大集合所含元素个数即可。要用带路径压缩的并查集,不然会TLE。另外,要注意当n为0时,要输出1. 题目有说: or there is only one boy left. 可能有100000个男孩,但都没配对,答案是1。 AC代码: #include using namespace std; #define NUM 10000005 int set[NUM]; int a原创 2013-02-09 16:28:19 · 473 阅读 · 0 评论 -
pat 1054 The Dominant Color
求数组中出现次数超过一半的数字,排序再取中位数太慢,hash表记录出现次数,空间复杂度太高,从另一个角度来看,出现次数超过一半的数字,其出现次数比其它所有数出现之和还多,每次从数组中除去两个不同的数字,直到最后,剩下的肯定是所求。用cad(候选)表示所求的数,nTime为它出现的次数。依次遍历数组,若a[i]和cad不同则nTime--; 若相同则nTime++; 若nTime为0, 则取下原创 2013-05-24 16:20:53 · 1893 阅读 · 3 评论 -
pat 1051 pop sequence
这题对于自己,意义不小,编程能力还是如此之弱!sigh! 用cur标记入栈序列的最大值,逐个扫描出栈序列x,当x与当前栈顶元素不一致(大于或小于)时就将cur++入栈(即使是x大于栈顶元素也将cur++入栈,它必将超过栈容量)。当x与当前栈顶元素一致时,将栈顶元素出栈即可。若栈内元素超过栈容量,则不合法。 AC代码: #include #include using namespace s原创 2013-05-24 10:51:27 · 1049 阅读 · 0 评论 -
pat1016 Phone Bills
题目不难,但输入输出数据多,格式多,需要些许思维和注意。花费了非常多时间,也算有些收获。首先,卡在输入输出上,string类型只能用cin,不能用scanf,printf ,若要用printf,只能用printf("%s",str.c_str())。输入中若带“:”,得用getchar()。在printf时,最后一个%02d少加了个%,一直报越界。要细心。此题发现,pat测试数据爱出在临界条件上,原创 2013-02-28 10:10:08 · 1240 阅读 · 0 评论 -
pat 1003 Emergency (值得重点回顾)
一开始看错题意,题意是要求单源点对最短路径数和最大的点权重之和。知道要用dijskra算法,但为了求最短路径数,还得用深搜,依次把点加入集合中,若路径长度=最短路径值时,路径数+1。同时求出最大的点权重之和。 递归函数{ 出口条件处理(最低级的情况); return ...; 从第1列的8个位置{ 依次尝试设置格子及限制区域 向下级递归 复原上一次尝试 } }; A原创 2013-02-26 21:44:37 · 2321 阅读 · 0 评论 -
pat 1020 Tree Traversals
已知二叉树后序和中序,求层次顺序。需要重点参考。 #include #include #include using namespace std; struct node { int value; node *left,*right; }; vector inOrder,post,ans; queue outOrder; node * getParent(int start,int en原创 2013-02-26 15:59:48 · 670 阅读 · 0 评论 -
总结
压标 //23:46 16分 #include const int NUM=100005; int a[NUM]; int v[NUM]; int main() { int n,i,val; int index=-1; //freopen("C:\\Documents and Settings\\Administrator\\桌面\\input.txt","r"原创 2013-03-10 10:04:25 · 838 阅读 · 0 评论 -
pat 1047 Student List for Course
与之前的一题类似,最后一点超时,是O(m*nlogn)。参考网上代码,不要每次都遍历,只遍历一遍就好。对于每一门课,都将其选课学生标记下来,再遍历一遍学生,若有标记的,则输出。 代码: //1047 19:20-19:38 #include #include #include #include #include using namespace std; map >m;原创 2013-03-07 19:32:21 · 1107 阅读 · 0 评论 -
pat 1049 Counting Ones
第4,6个点超时。后来发现居然是编程之美的一道原题,用了书上代码,直接AC。 代码: //1049 20:14-20:35 #include const int NUM=100000000; int find(int x) { int res=0; while(x){ if(x%10==1) res++; x=x/10; } return re原创 2013-03-07 20:36:32 · 1284 阅读 · 0 评论 -
pat 1045 Favorite Color Stripe
比较简单的dp题。假设dp[s]为s长度的字串的最大值。则状态转移方程为:dp[s]=dp[r]+1 ( seq[s]>seq[r]&& dp[r]+1>dp[s] )。就判断最后一个字母要不要加入即可。 AC代码: #include #define N 200 #define M 10000 using namespace std; int main(void){ int原创 2013-03-09 10:16:48 · 1456 阅读 · 0 评论 -
pat 1034 Head of a Gang
题意是要求总共有几个集合,每个集合权重最大的是哪个,以及每个集合中结点个数。一开始老想用并查集来做,发现实现起来很困难。参考网上代码,发现可以用DFS遍历,数出每个分支的结点个数。其中map的迭代器的使用得注意。还有,若一个gang中同时有多个相同的最大值,取字母序最小的。虽然不加这点,也能过,但为了健壮性,加上吧。 AC代码: #include #include #include原创 2013-03-06 11:10:34 · 1966 阅读 · 0 评论 -
pat 1033 To Fill or Not to Fill(值得重点回顾)
有点难度的贪心题,贪心策略有点绕,得静下心来分析,同时得增强自己的代码能力。实质是汽车加油问题。 贪心策略:假设现在自己处于A站,要考虑的是A站要不要加油,加多少油的问题。找到下一个要加油的站B(距离A站cmax*davg范围内的最便宜的站)。 1. A站油价比B价高,现在油箱里还有油,能跑到B站,那就不加油,直接跑去(这里B站跟2,3情况不同,是距离A站currGas*davg范围内的最便宜原创 2013-03-06 10:10:06 · 2514 阅读 · 1 评论 -
pat 1010 radix 部分正确20分
将两个其它进制的数都转化为10进制,再对比两者是否相等即可。题目没说范围,据说会出到这样的数据:1234567890 10 1 10 ,于是必须使用二分来做,否则必然TLE。 部分正确代码: #include #include char a[12],b[12]; #define NUM 1000 int dis(char a) { if(a>='0'&&a<='9') re原创 2013-02-18 21:12:00 · 1456 阅读 · 0 评论 -
hdu 1085 Holding Bin-Laden Captive!
此题在前题1082上增加了些变化,硬币的个数有限。指数的范围变成不确定,最大可能为sum=a[0]+a[1]*2+a[2]*5。第3层循环控制硬币的个数。另外,j是第一个括号的指数,虽然第1趟时j AC代码: //1398 16:07 #include using namespace std; const int iNum=8005; int c1[iNum],c2[iNum]; int ma原创 2013-02-16 17:23:02 · 443 阅读 · 0 评论 -
hdu 1398 Square Coins
母函数的第一道例题,可采用模版。 整理模版: #include using namespace std; const int lmax=10000; int c1[lmax+1],c2[lmax+1]; int main() { int n,i,j,k; while (cin>>n) { for (i=0;i<=n;i++)//c1保存第1个括号,c2总是保存一趟原创 2013-02-16 15:44:09 · 579 阅读 · 0 评论 -
pat 1055 The World's Richest
题意其实是求数组中的前k小的数。简单的方法大家都想得到,先排序,再取前k个,第二个不出意料的超时。要想以线性期望时间通过,应该得用随机选择算法来做。暂时先放着,以后再来解决。 代码: #include #include #include const int MAXN = 100005; struct human{ char name[10]; int age; int net_wort原创 2013-05-24 21:46:52 · 1218 阅读 · 0 评论
分享