| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:救命啊!!!WA了12次的题目,请问问题出哪里了?In Reply To:救命啊!!!WA了12次的题目,请问问题出哪里了? Posted by:zayhero at 2007-03-13 11:44:03 > 请问一下有什么特别麻烦的测试数据,我测试过下面的数据没问题,但依然WA
> 10 100
> 5
> 123456789 987654321
> 4
> 1 999……99(100个)
> 479
> 0 1
> 1
> 0 3
> 3
> 1 2
> 2
> 1 3
> 3
> 5 8
> 2
> 8 13
> 2
> 8 12
> 1
> 13 21
> 2
> 14 20
> 0
> 0 0
>
> 帮个忙啊~~~
> #include <stdio.h>
> #include <string.h>
> #define N 150
> int len=1,str[N]={0},d=2;
> struct
> {
> int m[N] ;
> }fib[490]={0};
> int main()
> {
> int sum(int c[],int a[],int b[],int lenstr);
> int check(int a[],int b[],int lena,int lenb);
> int search_right(int m[],int len);
> int search_left(int m[],int len);
>
> char n[N]={0};
> int left[N]={0},right[N]={0};
> int i,j=0,lenl,lenr,pleft,pright;
>
> fib[0].m[0]=1;fib[0].m[149]=0;str[0]=0;
> fib[1].m[0]=1;fib[1].m[149]=1;str[1]=1;
>
> for(i=2;i<=480;i++)
> {sum(fib[i].m,fib[i-1].m,fib[i-2].m,len);d++;} //结构体相加求FIBS
>
> while(1)
> {
> scanf("%s",&n);
> lenl=strlen(n);
> for(i=0;i<lenl;i++)
> left[i]=n[lenl-i-1]-48;
> scanf("%s",&n);
> lenr=strlen(n);
> if(n[0]=='0') break;
> for(i=0;i<lenr;i++)
> right[i]=n[lenr-i-1]-48;
>
> pleft=search_left(left,lenl);
> pright=search_right(right,lenr);
> printf("%d\n",pright-pleft);
> }
> return 0;
> }
>
> int sum(int c[],int a[],int b[],int lenstr) //高精度加法
> {
> int i;
> for(i=0;i<=lenstr;i++)
> {
> if((a[i]+b[i]+c[i])<10) c[i]=a[i]+b[i]+c[i];
> else {c[i]=a[i]+b[i]+c[i]-10;c[i+1]++;}
> }
> if(c[lenstr]==1) {len=lenstr+1;str[len]=d;} //STR[]保存进位时N,方便字典搜索
> c[149]=len; //C[149]保存数据长度
> return 0;
> }
>
> int check(int a[],int b[],int lena,int lenb) //检查两数大小
> {
> int i;
> if(lena>lenb) return 0;
> else if(lena<lenb) return 1;
> else
> {
> for(i=lena-1;i>=0;i--)
> {
> if(a[i]>b[i]) return 0;//big
> else if(a[i]<b[i]) return 1;//small
> }
> }
> return 2;//equal
> }
>
> int search_left(int a[],int len)
> { //搜索小于左边界
> int i;
> for(i=str[len]-1;i<=str[len+1];i++)
> {
> if(check(a,fib[i].m,len,fib[i].m[149])==1) return i-1;
> if(check(a,fib[i].m,len,fib[i].m[149])==2) return i-1;
> }
> }
>
> int search_right(int a[],int len) //搜索小于等于有右边界
>
> {
> int i;
> for(i=str[len]-1;i<=str[len+1];i++)
> {
> if(check(a,fib[i].m,len,fib[i].m[149])==1) return i-1;
> if(check(a,fib[i].m,len,fib[i].m[149])==2) return i;
> }
> }
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator