Shirlies
宁静专注认真的程序媛~
摘要: 考虑第n中,如果在第n-1中后面加m的话,就有f(n-1)中,如果加f的话还得考虑f(n-1)末尾的字母,如果f(n-1)末尾两位是mm和mf的话,在后面再加上f是不会出现O型的,mm型的好说,就是f(n-3)的后面加上mm就可以了,如果是mf的话还得考虑必须得是f(n-4)的后面加上mmf,所以总结为f(n)=f(n-1)+f(n-3)+f(n-4).但是这个题目的L值有点大,这一题我是险过的,还差点就超时了……#include "stdio.h"int main(){int l,m;int f[5];int i;while(scanf("%d%d", 阅读全文
posted @ 2012-02-15 21:01 Shirlies 阅读(518) 评论(0) 推荐(0) 编辑
摘要: 分两种情况,如果向上的话就有三种走法,一种向上,一种向左,一种向右,如果是向左(右)走,就有两种走法,一种向上,一种向左(右),然后继续分方向讨论……用一个二维数组,一个存储向上方向的步数,一个存储另外两个方向的步数,最后求和就可以了……#include "stdio.h"int main(){int T,n;__int64 s[2][32]={1,0};int i;for(i=1;i<=30;i++){s[0][i]=s[0][i-1]+s[1][i-1];s[1][i]=2*s[0][i-1]+s[1][i-1];}scanf("%d",&am 阅读全文
posted @ 2012-02-15 19:50 Shirlies 阅读(332) 评论(0) 推荐(0) 编辑
摘要: 看了别人的思路才找到怎么写的……#include "stdio.h"#include "string.h"int fib[210][400];int len=1;void cal_fib(int n){int i,j;int carry=0;memset(fib,0,sizeof(fib));fib[0][0]=1;fib[1][0]=1;len=1;for(i=2;i<=n;i++){carry=0;for(j=0;j<len;j++){fib[i][j]=fib[i-1][j]*i+carry;if(fib[i][j]>=10){c 阅读全文
posted @ 2012-02-15 18:26 Shirlies 阅读(591) 评论(0) 推荐(0) 编辑
摘要: O(∩_∩)O哈哈~轻松过了,感觉超爽~~~大数是有点令人头疼啊……//#define OJ//搞鬼,vc6不让我定义这个,DEV又有什么木马,被360挡住了……真是纠结……#include "stdio.h"#include "string.h"#define MAX 100000int mem[4][420];int tem[420];int main(){#ifdef OJfreopen("data.in","r",stdin);freopen("data.out","w&quo 阅读全文
posted @ 2012-02-15 16:12 Shirlies 阅读(523) 评论(0) 推荐(0) 编辑
摘要: 这一题用到了快速幂的方法,还有就是构造矩阵……#include "stdio.h"#include "string.h"void mult(int f[2][2],int y[2][2],int c[2][2])//求矩阵相乘{int i;int a[2][2],b[2][2];memcpy(a,f,sizeof(int)*4);//这里也,要将数组复制过来,否则是会出错的,因为传过来的有可能是相同的矩阵相乘……memcpy(b,y,sizeof(int)*4);for(i=0;i<2;i++){c[i][0]=(a[i][0]*b[0][0]+a 阅读全文
posted @ 2012-02-15 14:57 Shirlies 阅读(414) 评论(0) 推荐(0) 编辑