【发布时间】:2015-01-22 07:04:48
【问题描述】:
我正在尝试通过使用 BFS 并存储剩余部分并更新它来解决问题 here。但是,我这样做时会得到 TLE,我该如何消除它?
int t,n,i,j,z,y;
string l,m;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
pair<string,int>b;
queue<pair<string,int> >a;
b=make_pair("1",1);
a.push(b);
bool r[20001]={0};
while(!a.empty())
{
b=a.front();
a.pop();
// cout<<b.first<<endl;
if(b.second%n==0)
{
printf("%s\n",b.first.c_str());
break;
}
m=b.first;
y=b.second;
z=(y*10)%n;
if(r[z]==0)
{ r[z]=1;
l=m+'0';
b=make_pair(l,z);
a.push(b);
}
z=(y*10+1)%n;
if(r[z]==0)
{ r[z]=1;
l=m+'1';
b=make_pair(l,z);
a.push(b);
}
}
}
【问题讨论】:
-
您能解释一下您的代码是如何工作的吗?
-
问题是找出最小的数只包含 0 和 1 能被 n 整除。我正在使用 bfs 并有一个队列,该队列由该数字作为字符串和一对余数组成。首先我插入 1,然后如果余数为 0,则将 0 和 1 添加到队列中,然后我打印答案并打破循环
-
你需要发明比 BFS 更智能的东西。这就是重点。这些问题的设计使得 BFS 将 TLE。
-
@n.m.我不会那么肯定。它可以是图搜索优化的任务。
标签: c++ optimization