- 博客(23)
- 资源 (2)
- 收藏
- 关注
原创 poj 1808 Quadratic Residues
平方剩余的问题,题目只要判断是否存在平方剩余就行啦。。int solve(LL a, LL p) { //判断x*x (-=) a(mod p) 是否存在 LL res = pow_mod(a , (p - 1) >> 1, p); if (res == p - 1) return false; return ture; }
2013-09-28 16:26:48 837
原创 POJ 2142 The Balance
开始就按扩展阿基里德算法去做,但是错了很多次。。‘问题出在那个大小的转换。。AC代码:#include #include #include using namespace std;int fabs(int z){ if(z >= 0) return z; else return -z;}void exgcd(int a,int b,int &d,in
2013-09-27 21:16:48 874
原创 POJ 1006 Biorhythms
这个是这个剩余定理,开始按同余方程的方法求,结果很快就出来了。AC代码:#include#include#include#include#define N 21252using namespace std;int w[4],q[4]={23,28,33};void exgcd(int a,int b,int &d,int &x,int &y){ if(b==0)
2013-09-27 19:01:48 701
原创 POJ 2562
开始题目意思没有看懂,结合测试数据就知道是水题了,就是求有多少个进位。算是在poj上做的最水的一个吧!!AC代码:#include#include#include#includeusing namespace std;int main(){ int n,m,a,b,sum,c; while(scanf("%d%d",&n,&m) && (n || m))
2013-09-27 11:22:51 1305
原创 POJ 2689 Prime Distance
素数的二次筛选。素数的筛选,数据比较大,不能用常用的方法。因为最大数据是20亿,开根号后就为50000左右,把5万以下的素数表打出,再二次筛选就可以了。开始的时候把函数写在外面超时,写进去以后就0ms过,这个想不通。。。AC代码:#include#include#include#include#includeusing namespace std;int q[6
2013-09-27 10:53:46 743
原创 POJ 1090 生日蛋糕
是个bfs的题目,加剪枝就行。重点是怎样来剪枝。自己敲了,提交超时——应该是剪枝没有处理好,后来百度看了一下0ms过的代码,发现就差一个剪枝(2*(n-z)/r+y > s)就可以了。AC代码:#include#include#include#include#include#define maxx 99999999using namespace std;int n,m
2013-09-25 11:31:50 892
原创 HDU 1239 Calling Extraterrestrial Intelligence Again
是个小搜索题吧!不过也要注意一下剪枝。需要找到两个数(不妨设为p,q)满足以下条件: 1、 p,q均为质数; 2、p*q 3、a/b 要找到输出所有满足以上条件的p,q中乘积最大的一对p,q。剪枝:考虑大于10000的某个质数,不妨设为Q,另一个质数为P,则:a、如果Pb、如果P>10,P*Q>100000。而考虑到a,b的取值范围(1
2013-09-24 21:45:02 707
原创 POJ 1011 Sticks
题目的意思:给定N段长度不超过50的木棍,拼成相同长度的木棍,求这个长度的最小值。这个题目需要很多的优化:1.必须从但根长度的最大值maxx开始搜索->sum-maxx;必须满足被总和整除。2.标记,不要重复使用。按大小排序,可以跳过相同的值。3.如果搜索返回后长度为0,就可以跳出循环。AC代码:#include#include#include#includeu
2013-09-24 16:33:19 723
转载 HDU 1098 Ignatius's puzzle
题目的关键是f(x)=5*x^13+13*x^5+k*a*x;由于x取任何值都需要能被65整除.那么用数学归纳法.只需找到f(1)成立的a,并在假设f(x)成立的基础上,证明f(x+1)也成立.那么把f(x+1)二项式展开,得到5*( ( 13 0 )x^13 + (13 1 ) x^12 ...... .....+(13 13)x^0)+13*( ( 5 0 )x^5+(5 1
2013-09-21 17:48:40 706
原创 HDU 3579 (Hello Kiki)
中国剩余定理的题目,用扩展欧几里得算法去实现,木有什么特别的吧!!!今天感觉打同余定理的知识点好打多了吧!!继续。。。AC代码:#include#include#includetypedef __int64 ll;using namespace std;ll gcd(ll a,ll b){ return b == 0?a:gcd(b,a%b);}voi
2013-09-21 11:25:51 819
原创 HDU 1573 X问题
中国的剩余定理。思路是:先求w数组里面的最小公倍数lcm。方程在小于N的范围的解是a,则a+lcm*xAC代码:#include#include#includeusing namespace std;__int64 gcd(__int64 a,__int64 b){ return b==0?a:gcd(b,a%b);}void exgcd(__int64 a
2013-09-20 20:44:24 752
原创 POJ 2115 (C Looooops)
打这个纯粹是看书看到这里,看见这个题目,就按数上的打一下,就当理解一下线性同余方程,不过打完了,还有好多疑问!!!!表示数学真是太博大精深了。。。代码如下:#include#include#includeusing namespace std;void exgcd(__int64 a,__int64 b,__int64 &d,__int64 &x,__int64 &y){
2013-09-20 15:15:56 642
原创 HDU 1124 Factorial
题目的意思是求垒乘以后的结果末尾有多少个0。数据很大,不可能一次乘下去。所以必须考虑哪些值得乘积末尾是0,1、首先是10的倍数的末尾一定有0;2、末尾是5的可以乘以其他数的结果末尾为0;应该注意有25,50,75,(相距5*5=25个距离)这种数结尾的0要比其他的要多一个0;AC代码:#include#include#includeusing namespac
2013-09-20 10:00:09 748
原创 HDU 2136
数论的题目吧,开始用打表的方法求出素数的位置,后来在去搜索,这样超时了,可能是因为数据的组数比较多吧!!!如果在打表的时候把小于1000000所有的数全部打上去,直接输出去q[i]的值就行啦!!AC代码:#include#include#include#includeusing namespace std;int q[1000008];int ant;void pri
2013-09-19 16:41:48 750
原创 HDU 4255(蛇形填数+BFS+优先队列)
这个题目把代码打完以后,真心觉得蛋疼。不知道改了多久,构建的蛇形二维数组一直有问题。。。AC代码:#include#include#include#includeusing namespace std;int q[150][150],w[30000],r[150][150];int n,m;int c,d;struct node{ int a,b; int pri
2013-09-17 21:13:15 998
原创 HDU 1242 (BFS+优先队列)
这个题目直接BFS+优先队列;没有其他考虑的,从天使开始搜就行啦!!AC代码:#include#include#include#includeusing namespace std;char q[208][208];int w[208][208];int m,n;struct node{ int a,b; int pri; bool operator<(c
2013-09-17 19:52:04 729
原创 HDU 1026 (BFS+优先队列)
BFS+优先队列,做这个题的时候只要保存路径的前驱就行啦!!其他没有处理。虽然一次性AC,但是打了好久,手都累了。(还加上改错吧!!)AC代码:#include#include#include#includeusing namespace std;char q[108][108];int w[108][108];int m,n;struct node1{ //
2013-09-17 19:00:42 740
原创 POJ 2312
这个是BFS+优先队列,开始知道的时候就用步伐做优先的值。。没有考虑在'B' (brick wall) 时候的延迟一步就答案错了几次,不知道错在哪,百度的时候才知道要加。。。1.基本操作:empty() 如果队列为空返回真pop() 删除队首元素push(x) 加入x元素size() 返回当前队列中元素个数top() 返回队首
2013-09-17 17:36:50 845
原创 HDU 1492
好久没有做数论的题目了,今天看书的时候看到了几个给力的级数模型,就找了几个题目试试。。这个题目就是给定正整数n求其有多少个约数。。。数据比较大(64位),暴力基本没戏。。化为:n=p1^a1*p2^a2~~pn^an;则总个数sum=(a1+1)(a2+1)~~(an+1);前面那个分解试叫唯一分解试,在数论里面有很多应用。 15ms把,还算比较快。。AC代码:#i
2013-09-16 16:40:09 852
原创 UVA 10032(Tug of War)
这个开始的时候就用01背包3维数组,不知超时了多少次了,及其的伤感。后来用vector容器来做就可以防止超时发生了。简单总结一下vector用法,因为在动规里面经常要用到的。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。 vector里面的数据是动态分配的,使用push_bac
2013-09-11 10:19:14 1637 2
原创 湖南第八届 J题-病毒
在开始的时候就进了思维定式,开始了对先满足上升的条件,在解决相等的问题,就这样调试到比赛完也是(Wrong Answer)。伤感及........后面问了同学,说要先判断相等再保证上升,也没有说清理由是什么。就试着打了一下就过了。AC代码:#include#include#include#includeusing namespace std;int dp[1008][1008
2013-09-08 10:43:26 842
原创 RMQ with Shifts
湖南第七届ACM的最后一题,看了大家都知道是线段树,比赛的时候以为是把shift里面的数排序在重新放进去,所以没有AC啦。完了以后同学说了是把数据左移一位放进去就可以了。还有因为数据很大,不能用cin输入会超时,事实证明额超了很多次AC代码:#include#include#include#include#includeusing namespace std;int a
2013-09-05 17:07:16 759
原创 POJ 1463 Strategic game
其实这个和那个没有上司的晚会是一个类型的题目吧!! 几乎一样,都是个从根节点网下搜的树形动规。1、dp[i][0],表示在结点 i 没放置士兵的情况下,看住以结点 i 为根的子树的所有边所需的最少士兵;2、dp[i][1],表示在结点 i 放置士兵的情况下,看住以结点 i 为根的子树的所有边所需的最少士兵。状态转移:1、dp[i][0+=dp[j][1],j 是 i 的儿子
2013-09-02 17:42:41 649
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人