UVaOJ 112道题目-组合数学

1、110601/10183 How Many Fibs? (斐波那契计数)

使用字符数组表示数列,double可以表示300位整数,但会出现精度问题。

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<ctype.h>
using namespace std;
struct NODE
{
    char dig[150];
}nod[1005];
char a[150],b[150];
void rever(char a[])
{
    int la=strlen(a);
    for(int i=0;i<la/2;i++)
        swap(a[i],a[la-1-i]);
}
int _strcmp(char a[],char b[])
{
    int la=strlen(a),lb=strlen(b),i;
    if(la!=lb)return la<lb?-1:1;
    for(i=la-1;i>=0;i--)
    {
        if(a[i]!=b[i])return a[i]>b[i]?1:-1;
    }
    return 0;
}
int main()
{
    strcpy(nod[1].dig,"1");
    strcpy(nod[2].dig,"2");
    int i=3,j,cnt,t1,t2;
    for(;;i++)
    {
        int len1=strlen(nod[i-2].dig);
        int len2=strlen(nod[i-1].dig);
        cnt=0;
        for(j=0;j<len1||j<len2;j++)
        {
            t1=0;
            t2=0;
            if(j<len1)
                t1=nod[i-2].dig[j]-‘0‘;
            if(j<len2)
                t2=nod[i-1].dig[j]-‘0‘;
            nod[i].dig[j]=(t1+t2+cnt)%10+‘0‘;
            cnt=(t1+t2+cnt)/10;
        }
        if(cnt!=0)
            nod[i].dig[j++]=cnt+‘0‘;
        nod[i].dig[j]=‘\0‘;
        if(j>100)break;
    }
    int tot=i;
    //sort(nod,nod+tot,cmp);
    while(scanf("%s",a)!=EOF)
    {
        scanf("%s",b);
        if(a[0]==‘0‘&&b[0]==‘0‘)break;
        cnt=0;
        rever(a);
        rever(b);
        for(i=0;i<tot;i++)
        {
            //printf("%s\n",nod[i].dig);
            if(_strcmp(a,nod[i].dig)>0)continue;
            if(_strcmp(b,nod[i].dig)<0)break;
            cnt++;
        }
        printf("%d\n",cnt);
    }
    return 0;
}

时间: 2024-08-02 09:44:30

UVaOJ 112道题目-组合数学的相关文章

UVaOJ 112道题目-数据结构

1.110201/10038 Jolly Jumpers (快乐的跳跃者) 即从某个数字开始的N个连续数字 #include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> #include<ctype.h> using namespace std; int arr[3005]; bool cmp(int a,int b) { return a<b; } in

UVaOJ 112道题目-算数与代数

1.110501/10035 Primary Arithmetic (小学生算术) 注意输出格式 #include<stdio.h> #include<string.h> #include<math.h> #include<ctype.h> #include<algorithm> using namespace std; typedef long long lld; lld a,b; int main() { while(scanf("

UVaOJ 112道题目-排序

1.110401/10041 Vito’s Family (Vito 家族) 距离最小的点必定是中位数,必定出现在输入的点之间 #include<stdio.h> #include<string.h> #include<algorithm> #include<math.h> #include<ctype.h> using namespace std; int s[505]; int dis[30005]; const int INF=100000

纪念我的第100道题目

四五月份做ACM校赛都是没怎么接触过评测系统,很多注意要点都不了解.网络赛给时间长,最后全AC通过了,现场赛虽然一等奖,但是还是有点捉襟见肘,7道题目只做出来了4道,因为会的这几道代码提交比较早,所以才能得到一等奖,但是问题也还是比较明显,对于很多学过的数据结构和算法的知识运用不熟练,快速编程实现能力还是比较弱.所以6月份觉得自己需要大量的训练,所以从6号开始,到今天已经18天了,18天100道题目,也是努力坚持一步一步走过来,虽然100道题目不多,UVa hunting上第一名大神AC了452

Leetcode 120道题目

Leetcode 120道题目 [01]191. 位1的个数.231. 2的幂.342. 4的幂 原文地址:https://www.cnblogs.com/sunbines/p/10824622.html

leetcode 几道题目

是周六晚上的几道题,晚上11点半,睡的早,起不来! 494. Target Sum 分析:看完这题,看到数据范围,长度20,枚举就是1<<20 = 1e6, 然后单次20,总共就是2e8,感觉应该是暴力枚举,然后我就按照二进制的方式写了代码,tle了,我感觉应该可以过啊,然后就用dfs写了一下,刚好能过,卡的时间,感觉应该有优化的地方.其实正确的思路是dp,我刚开始感觉也是dp,因为要计算所有的可能,感觉dp也是暴力,算所有可能出现的情况,感觉跟暴力差不多!今天看了下别人的分析,是自己分析错了

codeforces 几道题目

BZOJ挂了....明天就要出发去GDKOI了....不能弃疗. 于是在cf水了几道题, 写写详(jian)细(dan)题解, 攒攒RP, 希望GDKOI能好好发挥.......  620E. New Year Tree 题目大意: N个结点的树, 结点1为根, 要支持2种操作(M个操作): 1.将以v为根的子树所有节点的颜色为c 2.询问以v为根的子树中不同颜色个数 N,M<=4*10^5, 1<=c<=60 题解: 处理出dfs序, 线段树维护. 1,2操作都对应线段树的一段区间(子

金朝阳——软件测试试题11道题目分析答案

第一道题:A,B,C都是安全漏洞,D是网站性能问题,所以正确答案是:A,B,C. 第二道题:web_reg_save_para,lr_save_string,r_eval_string,lr_user_data_point是Loadrunner最基本,也是很重要的函数,大家一定要掌握,本题的正确答案是:A,B,C,D. 第三道题:Loadrunner的脚本可分为三部分:Vuser_init.Vuser_end 和Action,一般把登录和注销放在Vuser_init.Vuser_end部分:把实

金朝阳——软件测试试题11道题目分享

测试人员相对于开发人员来说,对知识的广度要求更高. 1:下面所描述的属于安全漏洞方面的有哪些?()A.SQL注入问题B.跨站脚本(XSS)C.不安全的加密存储,比如CSDN网站的用户密码是明文密码D.网站访问缓慢 2:关于Loadrunner下列说法正确的是()A.web_reg_save_param最常用來做关联的函数B. 函数lr_save_string("我是一名软件测试工程师","tester")的含义是"把我是一名软件测试工程师字符串赋了test