POJ 3941
摘要:题意:给出n个有m面的骰子,扔一次,求出和,如果和小于等于k,就记1,否则就是和减去k,求最后期望。题解:用滚动数组dp[2][MAX]记录当前扔到某个数的情况种数,然后......挺水的。。View Code 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cmath> 5 using namespace std; 6 const int N=10005; 7 int dp[2][N]; 8 int main() 9 {10 int n,m,k;11
阅读全文
POJ 3012
摘要:题意:对于杨辉三角形的第n行,首先但看每一位,将其补成长度为k的数(左补0),然后将这一行连起来作为一个大数,求这个大数mod m。题解:数学公式推导题 1、补0实际上就是使得这个数左边的那个数乘以10的次方,那么最后答案就是Σ(C(n,m)*10^( (n-m)*k ) )%m 2、10^(n-m)k=(10^k)^(n-m),又有个C(n,m),正好组成二项式(1+10^k)^n的展开式 3、于是两个快速幂取模就可以解决了。 PS:不知样例有多少,这种复杂度也能达到500MS+,快速幂取模写怂了的没准还过不了= =! View Code 1 #include<cstd...
阅读全文
POJ 3365
摘要:题意:给出一个w*h的矩形纸,将它剪成一个无盖圆柱,使圆柱体积最大。题解:数学推公式类型题。View Code 1 #include<cstdio> 2 #include<cstring> 3 #include<cmath> 4 #include<algorithm> 5 using namespace std; 6 const double pi=acos(-1.0); 7 int main() 8 { 9 double w,h,x,v1,v2;10 while(scanf("%lf%lf",&w,&h),w
阅读全文
POJ 3146
摘要:题意:求杨辉三角形第n+1行中不能被质数p整除的的数的个数。题解:1、杨辉三角形第n+1行的数位:C(n,0)...C(n,n) 2、C(n,m)=n!/(m!(n-m)!),判断其能否被p整除就是看它是否含有因子p,n!中含有n/p+n/p^2+....n/p^k个p,由于C(n,m)是整数,所以不含的情况即n!中含p的个数等于其分子中含p的个数。 3、n/p,n/p^2,n/p^3...n/p^k实际就是n的p进制下的表示时各位的数。 4、假如n的第i位的p进制表示为a,那么要使最后不能被p整除,则分子的第i为的表示也应为a,但分子有m!和(n-m)!构成,实际上可以枚举第i位...
阅读全文
POJ 3276
摘要:题意:n头牛站成线,有朝前有朝后的的,然后每次可以选择大小为k的区间里的牛全部转向,会有一个最小操作m次使得它们全部面朝前方。问:求最小操作m,再此基础上求k。题解:1、5000头牛不是小数目,再怎么也得要n^2的算法,其中,枚举k是需要的,这就有n了,只能想办法给出一个n在O(n)时间内求出最小次数了。 2、对于给定的k,要想O(n)内把次数算出来,即只能扫一遍,一想到的必定是从前往后扫,遇到面朝后的就转头,但这一转牵扯太多,要改太多东西,k一大直接崩溃。 3、对于每次扫描到的第i个点,都至多只能改一次才能保证效率,即只改变化的。将牛的朝向弄成依赖型,即后者依赖于前者,这样在一个区间...
阅读全文
POJ 2619
摘要:题意:给出一个特殊构造的三角形,具体看原题的图,问从第i个三角形到第j个三角形最少经过的边数。题解:对于这种一看就知道通过推数学公式做的题重点就在如何推出公式: 1、先把题目中不必要的东西都去掉,三角形放在那干啥?还是去掉吧,将它变成 1 3 2 4 6 8 5 7 9 11 13 15 ........即根据三角形的位置与他们相连的情况化成上面,只有相邻的至多三个点与某个点相连 2、观察上面第2i-1行,它的末尾都为i^2,含i个数,且它的下一行都是i^2+2k的形式。 3、将问题变一下,给出任意一个n可以利用...
阅读全文
POJ 2425
摘要:题意:给定一个有向无环图,然后上面的一些结点上面有棋子,每次一个人可以选择一枚棋子走到与它相邻的点,不能走的就输了。然后给出初态,判断胜负。题解:图上面的SG博弈,dfs求SG函数,然后依次取异或就行了。View Code 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 int sg[1005],head[1005],nc; 6 struct Edge 7 { 8 int to,next; 9 }edge[1000000];10 voi
阅读全文
POJ 3088
摘要:题意:有一种锁,由B个数字构成。锁会选取<=B的数字分成任意份,然后份与份之间可以任意排列,求这种锁的种数。题解:枚举选从B个中选i个,然后在枚举i分成j份的方法,分成j份的方法即斯特林数,最后再乘以j的全排。View Code 1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 typedef long long LL; 5 LL s[12][12],c[12][12],f[12]; 6 int main() 7 { 8 s[0][0]=1; 9 c[0][0]=1;10 f[0]=1;
阅读全文
POJ 1354
摘要:题意:n个箱子,都由一把唯一的钥匙可以打开它。现在将每把钥匙分别放进这n个箱子中,上锁,然后撬开第一二个箱子,然后用这里面的钥匙接着打开,如此反复,如果能将所有箱子全打开,那么这就是一个好的放法。问有多少好的放法。题解:实际就是求将n个元素分为2个轮换有多少种,且一种含1,一种含2。dp[i]代表i个箱子的放法数,现在新加入一个箱子,如果让它和含1的箱子的轮换群组成新轮换有a种,与含2的有b中,显然,a+b=i的,因为组成新的轮换就是将原来的轮换中的某个数与它交换过来,有多少位就有多少种。于是预处理200个,再加个高精就可以了。View Code 1 import java.math.*; .
阅读全文
POJ 1309
摘要:题意:m个椰子,n个人,使得这n个人按次序醒来后能够将剩余的椰子分成n份多1,然后将1扔给猴子,自己拿走n份中的一份(这里的n一旦确定就不会改变),n次之后,剩余的椰子还能被n整除,求最大满足条件的n。题解:考虑第一次m%n==1,所以对m-1分解质因数,即m-1的所有非1的约数都能在第一次分椰子的时候满足条件,然后枚举所有m-1的约数,最多2000多个,找出最大的。View Code 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 c
阅读全文
POJ 3307
摘要:题意:一个数,如果能写成某个数各位数的乘积,那么它就是XX数,XX数从1开始算起,然后问你第n个XX数是多少。题解:考虑某个数的各位乘积得到的x,即所有1~10的数相乘,那么x分解质因数后必定由2、3、5、7组成,所以,所谓第几个XX数就是找第几个只有2,3,5,7的幂次构成的数而已,先打表预处理,直接得答案完事。View Code 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 typedef long long LL; 6 LL a
阅读全文
POJ 1117
摘要:题意:给出一个n,求所有的x+y=n且y是x长度仅差1的子序列。题解:分情况讨论,设y是x剔除第i位得到的数,1)若i>lenth(n)/2,y=x/10^i*10^(i-1)+x%10^(i-1)=x/10^i*10(i-1)+x-x/10^(i-1)*10^(i-1)=x-(x/10^(i-1)-x/10^i)*10^(i-1)x+y=2x-(x/10^(i-1)-x/10^i)*10^(i-1)=n设T=(x/10^(i-1)-x/10^i)2x-T*10^(i-1)=nx=(n+T*10^(i-1))/2x,n,T均为整数且i>1,所以n非偶数直接返回,其他情况则枚举T直到
阅读全文
POJ 3047
摘要:题意:求某天是星期几。题解:数学||模板View Code 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 char name[][12] = { "monday", "tuesday", "wednesday", 6 "thursday", "friday", "saturday", "sunday&quo
阅读全文
POJ 2722
摘要:题意:给一个角和一些正方形,用正方形去把角封住,要求被封住的面积最大。题解:面积最大的时候,所有正方形的对角线必定练成一条直线然后与角相交,如原题的图中就可以把正方形沿着角向外平移一些直到正方形对角线共线,此时达到移动的临界点。接着就是数学公式推导,用三角形内角和180,正弦定理,平行线确定的一些角相等便可以退出公式。公式比较长,可以一步步运算出来。View Code 1 #include<cstdio> 2 #include<cstring> 3 #include<cmath> 4 #include<algorithm> 5 using nam
阅读全文
POJ 2641
摘要:题意:在b*a的区域打台球,初始位置在中点,s秒之后,与水平边撞击n次,与垂直边撞击m次,并回到中点,求球的初速度与角度。题解:球的水平速度设为Vx,那么s秒后水平路程为Vx*s,与垂直边撞击m次又回到中点,由此得到水平路程为m*a,于是Vx*s=m*a,同理Vy*s=n*b,两式联立得答案。View Code 1 #include<cstdio> 2 #include<cstring> 3 #include<cmath> 4 using namespace std; 5 const double pi=acos(-1.0); 6 int main() 7
阅读全文
POJ 2666
摘要:题意:海上有地方发生爆炸,一个人与主船脱离,他想回到主船上去。爆炸的冲击波会使得主船沿着爆炸点到它的方向以V的速度远离,人有种装置确定主船位置,但是必须保证他到爆炸点的距离与船到爆炸点的距离一样,人的速度为2V,当前他们距离爆炸点的距离为D,人与船对于爆炸点的夹角为Θ,求人回到船的时间,如果大于10000,就输出"God help me!"。题解:为了保证人和船时时刻刻与爆炸点距离相等,所以人的径向速度也应为V,那么切向速度就是√3V,在t时刻,他到爆炸点的距离为D+tV,于是在dt时间内,他旋转的角速度就是(√3V)/(D+tV),角度为(√3V)/(D+tV)*dt=d
阅读全文
POJ 2191
摘要:题意:判断所有质数i<=k,2^i-1是否是质数,不是的话就要将它分解质因数输出来。题解:miller_rabin判,pollard-pho分解,基本就是枚举,也可以打表。View Code 1 #include<ctime> 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib> 5 #include<algorithm> 6 using namespace std; 7 long long factor[100],fac_top = -1; 8 //计算两个数的g
阅读全文
POJ 2649
摘要:题意:判断m能否整除n!题解:0特判,其他情况对m分解质因数并统计个数,看n!是否含多余该个数的质因数,n!关于质因数p的个数=(n/p+n/p^2+n/p^3......),即求出mod p=0,mod p^2=0等的个数。View Code 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cmath> 5 using namespace std; 6 const int mr=65536; 7 bool notp[mr]; 8 int pr[mr]
阅读全文
POJ 3978
摘要:题意:求区间[a,b]内所含质数个数。题解:筛一遍素数,二分查找。View Code 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 const int mr=100001; 6 bool notp[mr]; 7 int pr[mr]; 8 int pn; 9 void getpri()//筛素数10 {11 memset(notp,0,sizeof(notp));12 for(int i=2; i<mr; i++)13 {14
阅读全文
POJ 3213
摘要:题意:给出矩阵A[N,P],B[P,M],C[N,M],判断A*B是否等于C,如果不等,题目会保证只有一个位置是错的,要求输出这个位置以及它应该是什么。题解:对于矩阵乘法判等的问题,若是直接模拟一般都会超时。我们可以借助向量,这道题就用随机两个向量X[1,N],Y[M,1],然后X*A*B=x[1,M],X*C=x[1,M],判断两个x是不是相同,同理判断A*B*Y与C*Y的y是不是相等,都相等那就是正确的,否则,看x的哪个不等,代表这第几列错了,y的代表着第几行错了,最后在直接算一下这一行这一列该等于什么就行了。View Code 1 #include<cstdio> 2 #in
阅读全文
|
|
|