俊介三

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

导航

随笔分类 -  ACM&PAT

摘要:我们使用的很多函数实际上不是函数,而是宏macro。例如:(getc()、putc()实际上也不是函数)#define getchar() getc(stdin)#define putchar((c)) putc((c), stdout)总结C语言的输入输出:#include <cstdio>#include <iostream>using namespace std;int main(){ //注意,声明为int,因为int范围比char要大 int ch; //从stdin中获得一个char ch = getchar(); //把ch输出到stdout... 阅读全文

posted @ 2013-04-06 19:49 俊介三在前进 阅读(175) 评论(0) 推荐(0)

摘要:刚刚参加了腾讯2013马拉松,第二题(a^b)%c越界还是超时吧~桑不起。最后做了3/5~~第三题见提交的和过的都好少,直接无视。现在总结总结第二题快速幂的知识吧,当时不知道。。题目:求(m^n)%k 其中m,n的上限都是10^9,而c的值为10^9+7解答://整数的快速幂 m^n % k 的快速幂: __int64 quickpow(__int64 m , __int64 n , __int64 k){ __int64 ans = 1; while(n){ if(n&1)//如果n是奇数 ans = (ans *... 阅读全文

posted @ 2013-03-21 23:04 俊介三在前进 阅读(103) 评论(0) 推荐(0)

摘要:Square Coinshttp://acm.hdu.edu.cn/showproblem.php?pid=1398使用面值为1,2^2,3^2,4^2,...,17^2的硬币若干个,能有多少个组合方式组合成给定的数目N思路:母函数(generation function)的应用,构造(1+x+x^2+x^3...)(1+x^2+x^4+x^6+...)...(1+x^17+x^34+...)得到x^N的系数即为所求解。View Code #include <stdio.h>int result[305];int temp[305];int main(){ int i,j,k,n; 阅读全文

posted @ 2013-03-09 13:20 俊介三在前进 阅读(87) 评论(0) 推荐(0)

摘要: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)

摘要: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)

摘要: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)

摘要: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)

摘要:1048. Find Coins (25)http://pat.zju.edu.cn/contests/pat-a-practise/1048题目大意:给一系列硬币的面值,再给一个物品的总价值,找出两个硬币刚好能支付这个物品。最初思路错了,先给它排序,然后逐个找,以为排除一下最大的两个硬币都比物品价值小,或者最小两个都比物品大就行~其实,看清它问题各个变量的范围,可以发现面值[1,500],用哈希表的方法才不会超时~~哎,我勒个擦。。(PS. CYLL很稀饭火星,一些无厘头或不合理的规定、游戏规则,都会说在Mars上。。。)#include <stdio.h>#define MAX 阅读全文

posted @ 2013-03-04 23:29 俊介三在前进 阅读(160) 评论(0) 推荐(0)

摘要:1013. Battle Over Cities (25)http://pat.zju.edu.cn/contests/pat-a-practise/1003题目转换成这个意思:给一个图,求删掉一个节点后,剩下的图中,有多少个集合。思路:本来想 求多少个集合,用并查集方便些,后来发现,涉及删掉某个节点,重新构造一下并查集貌似挺麻烦。于是用了DFS、顺便练习了一下BFS。(后面有时间补个并查集的)#include <stdio.h>#include <string.h>#define MAX 2000int N,M,K;int mat[MAX][MAX];int visi 阅读全文

posted @ 2013-03-04 23:08 俊介三在前进 阅读(595) 评论(0) 推荐(0)