http://acm.hdu.edu.cn/showproblem.php?pid=1172好几天都没有写代码做题了,看书,效率好低好低的说。看SD(ACM)里在讨论各种比赛,哎哎,各种膜拜啊。ACM,水也要水一个才行。
直接枚举啊,其实这个题我觉得还是有其他方法的,得多看看:
我想写个min(s,t)求最小数的,居然写了个:
#define min(s,t) ((s=s+t),(t=s-t),(s=s-t))
哎哎,弱爆了!!!
#include<stdio.h>
#include<string.h>
#include<math.h>
int n,a[105][3],p[105][10],q[10];
int min(int s,int t)
{
if (s>t)
return t;
return s;
}
int test(int s)
{
int i,j,tmp,temp,same;
memset(q,0,sizeof(q));
tmp=s;
while (tmp)
{
q[tmp%10]++;
tmp/=10;
}
for (i=1;i<=n ;i++ )
{
same=0;
for (j=0;j<10 ;j++ )
same+=min(p[i][j],q[j]);
if (same!=a[i][1])
return 0;
same=0;
tmp=s;temp=a[i][0];
while (tmp)
{
if (tmp%10==temp%10)
same++;
tmp/=10;
temp/=10;
}
if (same!=a[i][2])
return 0;
}
return 1;
}
int main()
{
int i,ans,tmp;
while (scanf("%d",&n)==1&&n)
{
for (i=1;i<=n ;i++ )
scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]);
ans=0;
memset(p,0,sizeof(p));
for (i=1;i<=n ;i++ )
{
tmp=a[i][0];
while (tmp>0)
{
p[i][tmp%10]++;
tmp/=10;
}
}
for (i=1000;i<10000 ;i++ )
if (test(i))
{
if (!ans)
ans=i;
else
{ans=0;break;}
}
if (ans)
printf("%d\n",ans);
else
printf("Not sure\n");
}
return 0;
}
水题水题,