Shirlies
宁静专注认真的程序媛~
摘要: 如果在f(n-1)的后面再加一个m,序列仍然是合法的,如果在f(n-2)后面再加一对ff,结果仍然是合法的,还有一种情况来着,就是如果结尾时mf的话,再在后面加f,结果会变成合法的,但是和f(n-2)后加ff重复,所以应该加ff.所以最后就是f(n)=f(n-1)+f(n-2)+f(n-4)了。#include "stdio.h"#include "string.h"char s[1002][400];int main(){int n;int i,j;int len=1,l,carry;int a;char b[400],t;memset(s,0,siz 阅读全文
posted @ 2012-02-16 21:46 Shirlies 阅读(730) 评论(0) 推荐(0) 编辑
摘要: 考虑第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) 编辑
摘要: 数学真是源远流长啊!!现在又有斯特林数log10(n!)=1.0/2*log10(2*pi*n)+n*log10(n/e)现在我对数学的崇拜又加深了!#include "stdio.h"#include "math.h"#define e 2.71828182int main(){int T;int n;double t;scanf("%d",&T);while(T--){scanf("%d",&n);t=(double)n*log10(n*1.0/e)+0.5*log10(2.0*n*3.1415 阅读全文
posted @ 2012-02-14 16:30 Shirlies 阅读(586) 评论(1) 推荐(0) 编辑
摘要: #include <iostream>using namespace std;int get_count(int a){int count=1;while(a!=1){if(a%2)a=3*a+1;elsea=a/2;count++;}return count;}int main(){int n,m;while(cin>>n>>m){int max=get_count(n);int i,j;if(n>m){i=m;j=n;}else{i=n;j=m;}for(int k=i;k<=j;k++){if(max<get_count(k))max 阅读全文
posted @ 2012-02-13 19:23 Shirlies 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 简单题~~~#include <iostream>using namespace std;int gcd(int a,int b){if(b==0)return a;elsereturn gcd(b,a%b);}int main(){int T;int m,n;cin>>T;while(T--){cin>>m>>n;if(m==1){cout<<"NO"<<endl;continue;}if(gcd(n,m)==1){cout<<"NO"<<endl;}els 阅读全文
posted @ 2012-02-13 18:52 Shirlies 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 经典的数学题啊~~~题解:http://blog.csdn.net/cscj2010/article/details/6768395感触:数学还是得灵活应用啊,关键是这个公式啊……起初是打算用大数做的,觉得好麻烦,就搜了一下,看一下别人的思路,我晕,竟然可以这样思考,NB啊~~~还有就是因为后面约了一个式子,但是这个n得足够大,所以要先存储前面的几个数……#include "stdio.h"#include "math.h"int fib[50]={0,1};int main(){int n,i;double a;double ig,fp;for(i=2 阅读全文
posted @ 2012-02-13 10:53 Shirlies 阅读(490) 评论(0) 推荐(0) 编辑