比赛 |
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;
}