俊介三

一天更新一点,一天积累一点

导航

2013年3月8日

摘要: 1040. Longest Symmetric String (25)http://pat.zju.edu.cn/contests/pat-a-practise/1040给一个字符串,求最长的对称串的长度。最初思路:复制一个它的反串,求它们最大的公共子串,想了下复杂度是O(n^2)?还是直接遍历字符串,每个作为中心找记录最长串比较方便。注意abba和aba这两种形式的对称都要处理。View Code #include <stdio.h>#include <string.h>int len;int getSymm(char* str, int pos){ int coun 阅读全文

posted @ 2013-03-08 21:14 俊介三在前进 阅读(146) 评论(0) 推荐(0)

摘要: 1049. Counting Ones (30)http://pat.zju.edu.cn/contests/pat-a-practise/1049输入N,输出1到N之间有多少个1。譬如,1到13之间有1,10,11,12,13 6个数字1思路:按位数,找规律。参考例如100个位1的个数:它左边只能取0-9,所以有10个十位1的个数:它左边只能取0,右边能取0-9,所以有10个百位1的个数:1个View Code #include <stdio.h>int main(){ int d; scanf("%d",&d); int x=1; int total 阅读全文

posted @ 2013-03-08 20:18 俊介三在前进 阅读(188) 评论(0) 推荐(0)

摘要: 详见 http://www.cplusplus.com/reference/stl/vectorView Code #include <stdio.h>#include <vector>using namespace std;int main(){ vector<int>v; //把23加入到最后 v.push_back(23);//23 v.push_back(12);//23 12 //把最后的数删掉 v.pop_back();//23 //把最后的数删除 v.pop_back();// //清空 v.clear(); ... 阅读全文

posted @ 2013-03-08 19:07 俊介三在前进 阅读(159) 评论(0) 推荐(0)

摘要: 1047. Student List for Course (25)http://pat.zju.edu.cn/contests/pat-a-practise/1047跟前面贴的一篇-pat 1039类似,都是根据课程及注册学生进行排序。思路:创建一个课程结构体,里面有注册的学生及本课程总人数。注意,每个学生用一个整数来表示(题中说学生姓名为三个字母+1个数字,例如ABC4)这样存储和搜索的效率最高。按如下方法储存:A减字母A再左移24位,B减字母A再左移16位等等,最后把他们都加起来得到一个整数。这个整数解释姓名时,按相反操作即可。PS. 位移操作<< 优先级比加法还低?总之加括 阅读全文

posted @ 2013-03-08 13:35 俊介三在前进 阅读(503) 评论(0) 推荐(0)

摘要: 1024. Palindromic Number (25)http://pat.zju.edu.cn/contests/pat-a-practise/1024题目大意:给数N和K,求N和它的反转的和是否对称,在K步之内是否能达到。注意的地方:1.C++中,在函数中声明的数组,返回函数后,这些局部变量都释放了。如果不想释放,可以new一个。int* a = new int[10];然后把a这个地址返回,就能继续正常访问这个在函数中创建的数组2.题目中“where N (<= 1010) is the initial numer”,就不要用int N;来声明变量,浪费时间。View Code 阅读全文

posted @ 2013-03-08 11:54 俊介三在前进 阅读(171) 评论(0) 推荐(0)

2013年3月7日

摘要: hduoj 64位整数表示://在永远不死的VC6.0下可以通过//注意,输入输出最好用printf和scanf。cout cin什么的貌似可能有问题__int64 i=111; //范围是[-2^63, 2^63),即-9...~9... (共19位数)printf("%I64d\n",i);scanf("%I64d",&i);unsigned __int64 u=111;[0,2^64),即0~18...(共20位数)printf("%I64u\n",u);scanf("%I64u",&u);可 阅读全文

posted @ 2013-03-07 20:10 俊介三在前进 阅读(506) 评论(0) 推荐(0)

2013年3月6日

摘要: 1039. Course List for Student (25)http://pat.zju.edu.cn/contests/pat-a-practise/1039题目大意是给出每个课程和选这个课程的学生名单。统计一下每个人各选了什么课。好烦字符串排序题~不过细心点一般容易得分。看到学生人数40000,课程数2500。最初傻傻的还每个人给开bool course[2505]这样的大空间,哈希统计~尼玛每个能选到这么多课么?果然最后一个数据过不去。用vector来保存课程,比较灵活。先贴个辛辛苦苦码,没全过的:View Code #include <stdio.h>#includ 阅读全文

posted @ 2013-03-06 23:31 俊介三在前进 阅读(292) 评论(0) 推荐(0)

摘要: 1029. Median (25)http://pat.zju.edu.cn/contests/pat-a-practise/1029题目大意,给两个从小到大排好的数组,求这两个数组有序合并在一起的大数组的中位数。思路:两个数组各给一个指针,比较并往后移动,走了一定的步数后,把数输出来。//最初没弄好指针的含义,导致错了几次。指针的含义是:所指的位置为“还没访问的地方的首位”。#include <stdio.h>int arr1[1000005];int arr2[1000005];int main(){ int N,M; int i,j; scanf("%d" 阅读全文

posted @ 2013-03-06 14:14 俊介三在前进 阅读(183) 评论(0) 推荐(0)

2013年3月5日

摘要: 已知前、中序遍历结果,求后序遍历结果。pre: abefcgin: ebfagc思路:前、中和后序遍历都是对于根节点来说的,前序就是说跟最先访问,然后再进行递归的前序遍历其左右子树自顶向下分析对于前序遍历,分为(a)(bef)(cg) 分别为根,前序遍历左子树的结果,前序遍历右子树的结果;对于中序遍历,分为(ebf)(a)(gc) 分别为中序遍历左子树的结果,根,中序遍历右子树的结果。可见,先找到两种遍历结果的根(即上面的a的位置,前序为首个元素,中序要找到它~),可以构造一个递归函数,对其进行访问,但每次都要确定访问的起始位置。如下:#include <iostream>#inc 阅读全文

posted @ 2013-03-05 21:48 俊介三在前进 阅读(162) 评论(0) 推荐(0)

摘要: 队列的使用。详情见http://www.cplusplus.com/reference/queue/#include <stdio.h>#include <string.h>#include <queue>using namespace std;struct Node{ Node(){} Node(int a, char *n, int h){ age = a; strcpy(name,n); height = h; } int age; char name[20]; int height;}node[200];st... 阅读全文

posted @ 2013-03-05 14:37 俊介三在前进 阅读(253) 评论(0) 推荐(0)