比赛 20120705 评测结果 AATTTTTTTA
题目名称 数字计算 最终得分 30
用户昵称 TBK 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-07-05 10:21:27
显示代码纯文本
#include <iostream> 
#include <cmath> 
#include <cstring> 
#include <string> 
#include <cstdio> 
#include <cstdlib> 
#include <iomanip> 
#include <set> 
#include <algorithm> 
#define MAXN 0x7fffffff 
using namespace std; 
string str;
long long a[20],b,c,d,s;
long long jisuan(void)
{
	long long l[20],k[20],i,j=-1,m=0,n=0,t=0;
	for (i=0;i<str.length()-1;i++)
	{
		if (i==0) j=str[0]-'0';
		if (a[i]==0)
		{
			j*=10;
			j+=str[i+1]-'0';
		}
			else 
			{
				k[m]=j;
				m++;
				j=str[i+1]-'0';
				l[n]=a[i];
				n++;
			}
	}
	k[m]=j;
	m++;
	for (i=0;i<n;i++)
		if (l[i]==2) 
		{
			k[i+1]*=k[i];
			k[i]=0;
		}
	for (i=0;i<m;i++) t+=k[i];
	return t;
}
void tongji(void)
{
	int i,t=0;
	for (i=0;i<str.length()-1;i++)
		if (a[i]>0) t++;
	if (t<s) s=t;
}
void DFS(int x)
{
	if (x==str.length()-1) 
	{
		if (jisuan()==b) tongji();
		return ;
	}
	a[x]=0;
	DFS(x+1);
	//if (s!=MAXN) return;
	a[x]=1;
	DFS(x+1);
	//if (s!=MAXN) return;
	a[x]=2;
	DFS(x+1);
	//if (s!=MAXN) return;
}
int main(void) 
{    
    freopen("puzzle.in","r",stdin); 
    freopen("puzzle.out","w",stdout);
	cin>>str>>b;
	while (b>=0)
	{
		s=MAXN;
		DFS(0);
		if (s!=MAXN) printf("%d\n",s);
			else printf("-1\n");
		cin>>str>>b;
	}
	fclose(stdin); 
    fclose(stdout); 
    return 0; 
}