hdu 4403 简单搜索

思路:分等号左边和右边进行搜索

#include<iostream>

#include<cstdio>

#include<cstring>

#include<cmath>

#include<algorithm>

#define LL __int64

using namespace std;

char str[20];

int n,ans;

void right(LL sum,LL now,int cnt)

{

    if(cnt==n)

    {

        if(sum==now)

            ans++;

        return ;

    }

    if(sum==0)

        return ;

    if(sum>=now*10+(LL)(str[cnt]-'0'))

        right(sum,now*10+(LL)(str[cnt]-'0'),cnt+1);

    if(sum>=now)

    right(sum-now,str[cnt]-'0',cnt+1);

    return ;

}

void left(LL sum,LL now,int cnt)

{

    if(cnt)

    right(sum+now,str[cnt]-'0',cnt+1);

    if(cnt==n-1)

        return ;

    if(now)

    left(sum,now*10+(LL)(str[cnt]-'0'),cnt+1);

    left(sum+now,str[cnt]-'0',cnt+1);

}

int main()

{

    int i,j;

    while(scanf("%s",&str),str[0]!='E')

    {

        n=strlen(str);

        ans=0;

        left(0,0,0);

        printf("%d\n",ans);

    }

    return 0;

}

 

你可能感兴趣的:(HDU)