#include#include#include#include#include#include#inclu" />

黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

1513. Lemon Tale

系統(tǒng) 2011 0

http://acm.timus.ru/problem.aspx?space=1&num=1513

此題需要用到大整數(shù) ? 我是用萬進制 ?輸出時要注意不要多輸出0

思路方面 可以先想出來二維的解法 ?然后發(fā)現(xiàn)二維的可以轉(zhuǎn)化為一維的 ?

代碼:

      #include<iostream>

#include<cstdio>

#include<cstring>

#include<algorithm>

#include<string>

#include<vector>

#include<set>

#include<queue>

#include<stack>

#include<cmath>

#define LL long long



using namespace std;

const int N=10005;

const int M=1500;

const int K=10000;

struct node

{

    short int a[M];

    int I;

}ans[N];

void equ(int l1,int l2)

{

    ans[l1].I=ans[l2].I;

    for(int i=ans[l1].I-1;i>=0;--i)

    ans[l1].a[i]=ans[l2].a[i];

}

void add(int l1,int l2)

{

    int k=max(ans[l1].I,ans[l2].I);

    for(int i=0;i<k;++i)

    {

        ans[l1].a[i]+=(ans[l2].a[i]);

        if(ans[l1].a[i]>=K)

        {ans[l1].a[i]-=K;++ans[l1].a[i+1];}

    }

    if(ans[l1].a[k]>0)

    ++k;

    ans[l1].I=k;

}

void sub(int l1,int l2)

{

    int k=ans[l1].I;

    for(int i=0;i<k;++i)

    {

        ans[l1].a[i]-=(ans[l2].a[i]);

        if(ans[l1].a[i]<0)

        {ans[l1].a[i]+=K;--ans[l1].a[i+1];}

    }

    while(ans[l1].a[k-1]==0)

    --k;

    ans[l1].I=k;

}

void print(int x)

{

    for(int i=ans[x].I-1;i>=0;--i)

    {

        int k=ans[x].a[i];

        if(i<ans[x].I-1)

        for(int j=0;j<4;++j)

        {

            if(k==0)

            printf("0");

            else

            k=k/10;

        }

        if(ans[x].a[i])

        printf("%d",ans[x].a[i]);

    }

    printf("\n");

}

int main()

{

    //freopen("data","r",stdin);

    int n,m;

    while(scanf("%d %d",&n,&m)!=EOF)

    {

        int k=n+1;

        for(int i=0;i<=n+1;++i)

        {

            ans[i].I=0;

            for(int j=0;j<M;++j)

            ans[i].a[j]=0;

        }

        ans[0].a[0]=1;

        ans[0].I=1;

        equ(k,0);

        for(int i=1;i<=n;++i)

        {

            equ(i,k);

            add(k,i);

            if(i-m-1>=0)

            sub(k,i-m-1);

        }

        print(k);

    }

    return 0;

}


    

1513. Lemon Tale


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論