- 博客(21)
- 资源 (4)
- 收藏
- 关注
原创 PC/UVa 110706/10042 Smith Numbers
1 最小的素数是2 也就是说0 和1 不是smith数2 先求素因子,再求各个素因子的各位数字之和,然后相加3 素数不是smith数代码#include #include #include #include using namespace std;#define maxnum 1000int n;int num[maxnum],num1[maxnum],
2012-02-29 19:20:46 427
原创 PC/UVa 题号: 110704/10139 Factovisors
两个数 n 和 k 判断k能否整除 n!思路:任何一个正整数 n=p1^(x1)*p2^(x2)……*pn^(xn); 其中p1,p2.……pn 是素数,x1,x2,……xn 是各个素数的指数(也就是该质因数的个数)将k分解质因数,并记录各个质因数的个数分别用 2……n的数去除以k的质因数,每除一次就使k的质因数的个数减一,直到为零,最后遍历记录k的质因数个数的数组,只要有大于零的
2012-02-28 19:28:54 561
原创 PC/UVa 110303/10252 Common Permutation
给出两个字符串 a和b 输出满足如下条件的最长串 x : x的某两个排序分别是a 和b的(不必连续)的子序列首先注意 最长的串,不必连续的,我第一反应就是动态规划,再仔细一看,x 的某两个排序 也就是说,x是由a和b所含有的相同的字符组成的,但是x要从小到大输出有一点我恨不能理解,他明明说输入的每一行是由小写字母组成的字符串,但是这些字符串中居然含有空格,搞得我很郁闷,晕! #in
2012-02-28 16:26:04 512
原创 PC/UVa 题号: 110703/1014 Euclid Problem
对于任意正整数 A B#include #include #include #include using namespace std;根据数论只是,任何整数A,B,都存在这样一对X,Y 使得A*X+B*Y=gcd(A,B);成立(理论不推了,看我的博客“整除性”里面有讲解)代码#include #include #include #include u
2012-02-27 14:53:59 497
原创 整除性
整除性(此处只考虑非负整数)整除:a=b*k,(a!=0,b!=0),则 b|a(b整除a)如何寻找一个数的所有因数:任何一个整数,他的因数,都可以由他的素因数组成例如 12=2*2*3 ;他的因数有 1,2,3,4,6,12;注意不要重复 4=2*2,6=2*3 12=3*4=2*6……代码: 待续……最大公约数:m 既能整除a 又能整除b 则,m就是a 和b 的最大公约
2012-02-27 14:31:41 561
原创 模算术问题
加法(a+b)%n=((a%n)+(b%n))%n;减法 减法只是加上一个负数(a-b)%n= (a%n+(-b)%n)%n;注意 负数莫n可以通过加上n的正整数倍来转换成整数莫n例如妈妈给我¥123.45 爸爸给我¥94.67问我一共有多少零钱(12345+9467)%100==(12345%100+9467%100)=(45+67)%100=12花去¥52.53后,
2012-02-26 20:10:04 1327
原创 PC/UVa 题号: 110702/10006
主要求a^n mod n=a一开始直接求,超时,后来写了一个比较快的还是超时,最后看的人家的递归,才过了,数很大,用int会溢出,用long long 或者 unsigned都可以(double不可以mod)#include #include #include #define maxnum 65000int num[maxnum];int mid[maxnum];u
2012-02-26 20:08:45 362
原创 有关素数的知识
1 基本概念素数:只能被1 和它本身整除的整数算数的基本定理:每一个整数表示成素数乘积的方式只有一种 ; 例如 105=3*5*7;是唯一的;这个唯一的算数分解式成为素因数分解如果一个素数p 在整数x的素因数分解中出现,则称它为x的因数,也称为约数合数: 大于1切不是素数的整数1 既不是素数也不是合数2,寻找素数2 是素数中唯一的偶数,判断一个数是不是素数用试除法:从最
2012-02-26 15:08:10 608
原创 poj 1835 宇航员
注意 当宇航员面相z轴时,如果向上是头所对的方向,例如,如果宇航员现在面相z轴的正半轴(2)向上,则是x 的负半轴(3);如果打表的话要注意,宇航员的头可能会倒过来有一个公式 坐标轴的方向 0,1,2,3,4,5,; 可得到(n+3)%6 即为 n 的反方向,只需设三个参数,dir,(脸所对方向) lfdir(左脸说对方想),h(头所对方向)一开始 dir=0,h=2 lfdir=4注
2012-02-26 11:35:29 869
原创 poj 3589 Number-guessing Game(水题)
A 表示 猜的位置和数对,B表示猜的数对但是位置不对问 A,和B各有多少个读题是关键啊,一开始就把题给理解错了#include #include using namespace std;#define maxnum 10char num1[maxnum],num2[maxnum];int a[maxnum],b[maxnum];void fun(){ i
2012-02-26 11:20:46 680
原创 poj 3176 Cow Bowling
求最大的路径数之和#include #include using namespace std;#define maxnum 355#define max(a,b) (a)>=(b)? (a):(b)int map[maxnum][maxnum];int n;int main(){ int i,j; while(cin>>n) { if(n==0
2012-02-26 11:16:33 267
原创 poj 3673 Cow Multiplication(水题)
求A的各位数与B的各位数的成绩之和直接算#include #include using namespace std;#define maxnum 15char stra[maxnum],strb[maxnum];int a[maxnum],b[maxnum];int main(){ int i,sum,la,lb; while(cin>>stra>>st
2012-02-26 11:14:03 351
原创 poj 1118 Lining Up
题意: 求在同一条直线上的点最多的个数;郁闷,一开始就想如果挨个求斜率,然后找斜率相同最多的个数,会超时,可惜,真的暴力不会超时斜率 k=(y1-y2)/(x1-x2);但是得用 乘法算,因为当中可能会出现除数为零的情况 (y1-y2)*(x2-x3)==(x1-x2)*(y2-y3)代码:#include #include #include using n
2012-02-26 11:09:07 414
原创 POJ 1091 跳蚤(经过三天的研究,终于真的把它搞明白了)
题意:一个序列有n+1个数 最后一个为m ,前面的数都不大于m ,一个跳蚤按照这个序列使其能够跳到距离起始位置左边一个单位长度的的地方,求有多少种这种数列;一开始读题,我 就想着 这n+1个数相加最后结果肯定是1;这需要数论的知识如果存在x[1],x[2].....x[n],使得 data[1]*x[1]+data[2]*x[2]+......+data[3]*x[3]==1;,则,dat
2012-02-26 11:00:25 1310
原创 PC/UVa 题号: 110101/100 3n+1 Problem
不解释了,暴力,不过需要注意的是 i有可能大于j #include #include #define maxnum 1000001long fun(int n){ long sum=1; while(n>1) { if(n%2==0) n/=2; else n=n*3+1; sum++; } return sum;
2012-02-24 16:27:40 550
原创 PC/UVa 题号: 110201/10037 Jolly Jumper
这道题是个非常简单的题,数量也不大,但是我居然会犯这种低级错误,最后输出把小写搞成大写,悲剧的我一直找不到问题在哪,郁闷 代码:#include #include using namespace std;#define maxnum 3005int a[maxnum];int sign[maxnum];int main(){ int n=0; int
2012-02-24 14:23:13 462
原创 PC/UVa 题号: 110701/10110 Light,More Light
题意大概:走廊里有n个灯泡,一个人就来回走n次,(来回指的是一来一回算一次)当走第i次的时候他只能按动能被i整除的灯泡按钮,但是回来的时候不按开关,求最后一个灯泡是开着的还是关着的 一开始读题的时候很纠结”来回“俩字,很郁闷!(一开始题中没说灯的状态是开着的还是关着的,但是本着节约的原则,我觉得是关着的,事实证明是关着的,嘿嘿) 分析: 当走第i次的时候他只能按动能被i整除的灯泡按钮
2012-02-24 13:41:38 487
原创 PC/UVa 题号:110401/10041 Vito's Family
大概意思可以描述为 求道到一条直线上n个点的距离和的最短距离。本题的重点在排序。这道题初中证明过利用绝对值的性质,当一个点在线段两端点之间时,这个点到两端点的距离之和最短,当线段上游n个点,如果为奇数个点,则,当该点与中间的点重合,距离最短,当有偶数个点是 在n/2 与n/2+1个点之间的点,到这n个点的距离之和最短! 文字描述太麻烦了,都怪小学语文没学好!#include
2012-02-24 11:27:12 483
原创 PC/UVa 110102/10041 Minesweeper
这个题不难,但是最后最后会栽倒PE 手里,犯了经验主义错误注意“There must be an empty line between field outputs. ”只在每两个输出矩阵之间有空行,最后不输出空行(所有数据都是一次输入,只要在两个输出矩阵之间含有空行就行,不要求空行的位置一定得在下一次输入之前)代码:#include using namespace std;#def
2012-02-24 11:10:18 481
原创 ZOJ 3019
一看到LCS 我就以为是动态规划,但是当我看到You can arrange elements in a andb in any order,彻底崩溃,原来只需要找到他们相同的元素即可…… #include #include #include #include using namespace std;#define maxnum 105int a[maxnum]
2012-02-21 21:27:30 439
原创 HDU 2845
动态规划,二次dp ,先求出每一行的最大值,再用同样的方法求出这些最大值中的最大值 #include #include #include using namespace std;#define maxnum 200005#define max(a,b) (a)>(b)? (a):(b)int a[maxnum],h[maxnum];int dist[maxnum
2012-02-21 20:08:22 321
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人