poj 1426 Find The Multiple(bfs)

博客内容讲述了如何解决POJ 1426问题,通过从1开始尝试不同数字组合,利用宽度优先搜索(BFS)策略寻找满足条件的数字。作者在实现过程中遇到内存和时间限制问题,通过调整队列大小、优化内存使用以及将C++的输入输出改为C风格,最终成功通过测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路很简单,第一个数字为1,第一位以后的数字为0或1,往后不停的试,直到找到结果。

这题第一次提交时re,我就修改队列数组的大小,改了好几次,不re了,内存又超了,又改了一次,内存不超了,超时了,然后把c++的io换成c的,终于ac了。

#include <cstdio>

struct node
{
    int digit;
    int remain;
    int hd;
};

node que[800000];
int res[1000];

int main()
{
    int n,flag;
    while(scanf("%d",&n) && n)
    {
        flag = 0;
        int head = 0, tail = 0;
        que[tail].hd = -1;
        que[tail].digit = 1;
        que[tail].remain = 1 % n;
        ++tail;
        while(head < tail)
        {
            node temp;
            for(int k = 0; k < 2; ++k)
            {
                temp.digit = k;
                temp.remain = (que[head].remain*10 + temp.digit) % n;
                temp.hd = head;
                que[tail++] = temp;
                if(temp.remain == 0)
                {
                    flag = 1;
                    break;
                }
            }
            if(flag) break;
            ++head;
        }
        int index = 0;
        for(int i = --tail; i != -1; i = que[i].hd)
            res[index++] = que[i].digit;

        for(int i = --index; i >= 0; --i)
            printf("%d",res[i]);
        printf("\n");
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值