7.14-E KAri 409数の関係

2618 ワード

409.数の関係
時間制限5000 ms
メモリ制限65536 KB
タイトルの説明
関係"<"と"="で3つの数A、BとCを順番に並べた場合、A=B=C、A=BB<A<C,B<C<A,B=C<A,C<A=B,C<A<B,C<B<A .
数字の個数を入力し、上記の関係の数を指定する必要があります.
数の個数は100以下
入力フォーマット
複数組のデータ、EOF終了
行ごとに1つの入力
出力フォーマット
入力ごとに1行出力します.答えに対応します.
入力サンプル
3

出力サンプル
13
dp  : a[i][j]=a[i-1][j-1]*(j+1)+a[i-1][j]*(j+1)    a[i][j],i     ,j          
  :        n=1,2  sum
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <stack>
#include <queue>
using namespace std;

struct bign
{
    int len,s[500];
    bign() //  :       ,      
    {
        memset(s,0,sizeof(s));
        len=1;
    }
    bign operator =(const bign& m) //  =    
    {
        for(int i=0;i<m.len;i++)
        {
            s[i]=m.s[i];
        }
        len=m.len;
    }
    bign operator +(const bign& n) //  +    
    {
        bign d;
        memset(d.s,0,sizeof(d.s));
        d.len=0;
        for(int i=0,g=0;g||i<max(len,n.len);i++)
        {
            int x=g;
            if(i<len)
                x+=s[i];
            if(i<n.len)
                x+=n.s[i];
            d.s[d.len++]=x%10;
            g=x/10;
        }
        return d;
    }
};

    bign c;
    struct bign sum[200],a[110][110];

int main()
{

    int T,j,t,n,m,i,count,q;
    for(i=0;i<=100;i++)
         for(int k=0;k<=100;k++)
         {
            memset(a[i][k].s,0,sizeof(a[i][k].s));
            a[i][k].len=1;
         }
    a[2][0].s[0]=1; a[2][1].s[0]=2;//a[i][j],i     ,j          
    sum[1].s[0]=1;
	sum[2].s[0]=3;
    for(i=3;i<=100;i++)
    {

        memset(c.s,0,sizeof(c.s));
        c.len=1;
        memset(sum[i].s,0,sizeof(sum[i].s));
        sum[i].len=1;
        sum[i].s[0]=1;
        a[i][0].s[0]=1;
        for(j=1;j<=i-1;j++)
        {
        	//a[i][j]=a[i-1][j-1]*(j+1)+a[i-1][j]*(j+1) 
            c=a[i-1][j-1]+a[i-1][j];
            for(int k=1;k<=j+1;k++)
                a[i][j]=a[i][j]+c;
            sum[i]=sum[i]+a[i][j];
        }
    }
    while(scanf("%d",&n)!=EOF)
    {
        for(j=sum[n].len-1;j>=0;j--)
        {
            printf("%d",sum[n].s[j]);
        }
        printf("
"); } return 0; }