poj1465 wronganswer

complicated_world 2016-08-11 08:08:12
本人用bfs+同余定理做的(顺便加了个千进制),与同学对拍没错,一交就wronganswer,感到很不解

#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <string>
#include <cstdlib>
using namespace std;

struct f1
{
int d[101],s,t;
}f[10000],a;
int i,j,k,n,m,b[15],r;
bool fl[5050],flag;

void cale(int i)
{
int r=a.t;
if(a.d[r]>999) {a.t++;a.d[r+1]=a.d[r]/1000;}
for(j=r;j>=1;j--)
{
a.d[j]=(a.d[j]*10+a.d[j-1]/1000)%10000;
}
a.d[1]+=i;
}

void bfs()
{
int l=1,i;
while(l<=r)
{
for(i=1;i<=m;i++)
{
a=f[l];
a.s=(a.s*(10%n)%n+b[i]%n)%n;
if(!fl[a.s])
{
fl[a.s]=true;
cale(b[i]);
r++;
f[r]=a;
}
if(a.s==0)
{
cout<<a.d[a.t];
for(int u=a.t-1;u>=1;u--)
{
k=999;
while(a.d[u]<k)
{
cout<<'0';
k/=10;
}
printf("%d",a.d[u]);
}
flag=true;
cout<<endl;
return;
}
}
l++;
}
}

void qsort(int l,int r)
{
int i=l,j=r,x=b[(l+r)/2];
while (i<=j)
{
while (b[i]<x) i++;
while (b[j]>x) j--;
if (i<=j)
{
k=b[i];b[i]=b[j];b[j]=k;
i++;j--;
}
}
if (i<r) qsort(i,r);
if (l<j) qsort(l,j);
}

int main()
{
while(scanf("%d%d",&n,&m)==2)
{
r=0;
for(i=1;i<=m;i++)
{
scanf("%d",&b[i]);
if(b[i]==n) {cout<<n<<endl; continue;}
}
if(n==0) {cout<<n<<endl; continue;}
qsort(1,m);
flag=false;
for(i=1;i<10000;i++)
{
f[i].s=f[i].t=0;
memset(f[i].d,0,sizeof(f[i].d));
}
memset(fl,false,sizeof(fl));
for(i=1;i<=m;i++)
if(b[i]!=0)
{r++;f[r].d[1]=b[i];f[r].s=b[i]%n;f[r].t=1; fl[f[r].s]=true;}
bfs();
if(!flag) cout<<0<<endl;
}
return 0;
}
...全文
831 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-08-12
  • 打赏
  • 举报
回复
边界条件 输入输出格式 ……

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧