青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

hdu 4294 Multiple 數(shù)論 + bfs

   這是前天成都網(wǎng)賽的題,比賽時(shí)候確實(shí)一點(diǎn)思路也沒有。比完之后看了人家的解題報(bào)告,還是不會(huì)怎么搜出答案,太弱了。
   題意是給出N,K,求M,使得M是N的正倍數(shù),而且M用K進(jìn)制表示后所需要的不同數(shù)字(0,1,2,3,...,k-1)最少,如果有多組
這樣的情況,求出最小的M。
   很數(shù)學(xué)的題意。用到了一個(gè)結(jié)論,就是任意數(shù)字的正倍數(shù)均可以用不超過2個(gè)不同數(shù)字的數(shù)得到。
   證明如下:
   任意數(shù)M % N 總共有N種結(jié)果,假如有N+1個(gè)不同的M,那么肯定有2個(gè)M對(duì)N取模后的結(jié)果是相同,這個(gè)是所謂鴿巢原理。
那么,我取a,aa,aaa,...,aaaaaaaaaa....,總共N+1個(gè),同樣滿足上面的結(jié)論。那么我取那2個(gè)對(duì)N取模相同的數(shù)字相減得到
數(shù)字aaaaa...000....,這個(gè)數(shù)字肯定是N的倍數(shù)。
   綜合上面的證明,只能得到2個(gè)數(shù)字肯定能表示N的倍數(shù)。但是不能說形式就是aaaaa...000....。

   到了這里我還是一點(diǎn)思路都沒有,一點(diǎn)都不知道怎么搜索。。。
   想了1個(gè)多小時(shí),無頭緒,問過了這題的同學(xué),還是無頭緒。看解題報(bào)告,他們的代碼寫得太牛了,完全看不懂,無頭緒。
也許也是我對(duì)bfs理解太淺,才看不懂他們的搜索代碼。而且,我連可以搜索的地方都沒有找到,都不知道搜什么了。
   想了好久,昨天吃飯的時(shí)候,終于發(fā)現(xiàn)可以對(duì)余數(shù)進(jìn)行搜索。
   對(duì)于任意的N,其余數(shù)就是范圍是[0, N -1]。這個(gè)其實(shí)就可以代表狀態(tài)了,或者代表bfs中的點(diǎn)了。從當(dāng)前余數(shù)轉(zhuǎn)移到其它
余數(shù)的是MOD * K +  A 或者 MOD * K + B,如果要轉(zhuǎn)移到得余數(shù)以前沒被搜過,那就可以轉(zhuǎn)移過去。這個(gè)剛好就是一個(gè)
優(yōu)化了。也可以看成是子問題了。但是,dfs完全不行。剛開始用dfs,絕對(duì)的超時(shí)。
   用dfs也是我對(duì)思路理解不深,僥幸認(rèn)為能過。。。后面發(fā)現(xiàn),這題完全和bfs吻合。[0, N -1]剛好代表N個(gè)點(diǎn),我要通過
從外面的一個(gè)點(diǎn),最短的遍歷到點(diǎn)0,可以bfs或者最短路算法。這題我覺得還有個(gè)難點(diǎn)就是保存答案,因?yàn)榇鸢缸铋L(zhǎng)的長(zhǎng)度
可能是N(N<=10000),所以把答案直接放到節(jié)點(diǎn)里面肯定不行的。但是,我還仔細(xì)看過算法導(dǎo)論。因此想到了可以利用bfs
搜索出來的那顆樹或者最短路算法跑出來的那顆樹,從目標(biāo)節(jié)點(diǎn)逆序?qū)ふ掖鸢福业匠霭l(fā)節(jié)點(diǎn)之后,再把答案reverse一下就行了。
   這題還得注意0不能是N的倍數(shù),所以注意bfs(0,i)這種情況的處理。

   代碼如下:
#include <stdio.h>
#include <string.h>
#include <queue>
#include <algorithm>
using namespace std;

const int MAX_N = 10010;
int nOut[MAX_N];
int nOLen;
int nAns[MAX_N];
int nALen;
bool bMod[MAX_N];
int nFather[MAX_N];
int nChoose[MAX_N];
int nN;
int nK;
bool bFind;

int Cmp(int* A, int nLA, int* B, int nLB)
{
    if (nLA != nLB)
    {
        return nLA - nLB;
    }
    for (int i = 0; i < nLA; ++i)
    {
        if (A[i] != B[i])
        {
            return A[i] - B[i];
        }
    }
    return 0;
}

void Bfs(int nA, int nB)
{
    memset(bMod, falsesizeof(bMod));
    queue<int> que;
    que.push(0);
    int nTemp;
    bool bFirst = true;
    bFind = false;
    
    if (nA > nB)swap(nA, nB);
    //printf("nA:%d, nB:%d\n", nA, nB);
    while (!que.empty())
    {
        //printf("nMod:%d\n", que.front());
        int nMod = que.front();
        que.pop();
        if (nMod == 0)
        {
            if (bFirst)bFirst = false;
            else
            {
                bFind = true;
                break;
            }
        }
        
        nTemp = (nMod * nK + nA) % nN;
        if (!(nMod == 0 && nA == 0) && !bMod[nTemp])
        {
            nFather[nTemp] = nMod;
            nChoose[nTemp] = nA;
            que.push(nTemp);
            bMod[nTemp] = true;
            //printf("nTemp:%d\n", nTemp);
        }
        if (nA == nB)continue;
        nTemp = (nMod * nK + nB) % nN;
        if (!bMod[nTemp])
        {
            nFather[nTemp] = nMod;
            nChoose[nTemp] = nB;
            que.push(nTemp);
            bMod[nTemp] = true;
            //printf("nTemp:%d\n", nTemp);
        }
    }
    
    if (bFind)
    {
        int nF = 0;
        nALen = 0;
        do
        {
            nAns[nALen++] = nChoose[nF];
            nF = nFather[nF];
        } while (nF);
        reverse(nAns, nAns + nALen);
    }
}

int main()
{
    while (scanf("%d%d", &nN, &nK) == 2)
    {
        bool bOk = false;
        nOLen = 0;
        for (int i = 1; i < nK; ++i)
        {
            Bfs(i, i);
            if (bFind)
            {
                if (nOLen == 0 || Cmp(nOut, nOLen, nAns, nALen) > 0)
                {
                    nOLen = nALen;
                    memcpy(nOut, nAns, sizeof(int) * nALen);
                }
                bOk = true;
            }
        }
        if (!bOk)
            for (int i = 0; i < nK; ++i)
            {
                for (int j = i + 1; j < nK; ++j)
                {
                    Bfs(i, j);
                    if (bFind)
                    {
                        if (nOLen == 0 || Cmp(nOut, nOLen, nAns, nALen) > 0)
                        {
                            nOLen = nALen;
                            memcpy(nOut, nAns, sizeof(int) * nALen);
                        }
                    }
                }
            }
        for (int k = 0; k < nOLen; ++k)
        {
            printf("%d", nOut[k]);
        }
        printf("\n");
    }

    return 0;
}

posted on 2012-09-18 13:27 yx 閱讀(1389) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 搜索數(shù)論

<2012年9月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

導(dǎo)航

統(tǒng)計(jì)

公告

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

me

好友

同學(xué)

網(wǎng)友

搜索

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            免费观看久久久4p| 欧美一区三区三区高中清蜜桃| 开元免费观看欧美电视剧网站| 午夜久久久久久| 午夜伦理片一区| 欧美一区二区三区在线观看| 欧美一区二区在线播放| 欧美在线观看一区| 久久夜色精品国产亚洲aⅴ | 国产亚洲福利| 国产亚洲精品bv在线观看| 国内精品美女在线观看| 亚洲高清123| 一区二区精品在线| 久久国产日韩欧美| 欧美激情亚洲另类| 在线性视频日韩欧美| 欧美与黑人午夜性猛交久久久| 久久久久国内| 欧美精品激情在线| 国产精品视频一二三| 国产区精品视频| 亚洲国产精品视频一区| 在线综合亚洲欧美在线视频| 久久国产精品第一页| 亚洲二区在线| 99视频一区| 悠悠资源网亚洲青| 欧美系列电影免费观看| 国产午夜亚洲精品羞羞网站| 亚洲人www| 性欧美办公室18xxxxhd| 欧美freesex8一10精品| 亚洲一区综合| 欧美日韩成人| 亚洲风情亚aⅴ在线发布| 亚洲一二区在线| 欧美mv日韩mv国产网站app| 中文日韩欧美| 欧美久久影院| 亚洲高清一区二区三区| 欧美一区二区三区四区在线观看地址 | 亚洲一区精品在线| 蜜桃av一区二区三区| 一区二区三区**美女毛片| 久久婷婷av| 狠狠色伊人亚洲综合网站色| 亚洲欧美视频一区| 亚洲日本va在线观看| 久久夜色精品国产| 国产一区美女| 久久国产精品久久精品国产| 亚洲图片欧洲图片日韩av| 欧美日韩视频在线观看一区二区三区 | 久久久噜噜噜| 国产专区一区| 久久成人18免费网站| 中国女人久久久| 欧美视频一区二区在线观看 | 久久久综合激的五月天| 亚洲免费在线| 国产精品视频网站| 久久狠狠婷婷| 久久久精品欧美丰满| 国内精品久久久久影院色| 久久人91精品久久久久久不卡| 性欧美1819性猛交| 国内成人在线| 欧美成人精品三级在线观看| 噜噜噜在线观看免费视频日韩| 亚洲二区在线| 亚洲精品日韩综合观看成人91| 欧美激情2020午夜免费观看| 久久米奇亚洲| 亚洲国产美女| 亚洲精品国产精品乱码不99按摩| 久久久久久久久久久成人| 亚洲午夜精品一区二区| 亚洲乱码精品一二三四区日韩在线 | 美乳少妇欧美精品| 欧美自拍偷拍| 国产精品二区三区四区| 亚洲国产视频一区二区| 亚洲电影下载| 久久久水蜜桃| 国产深夜精品| 亚洲欧美资源在线| 亚洲欧美日韩精品| 欧美三级特黄| 99国产精品私拍| 9人人澡人人爽人人精品| 欧美成人有码| 亚洲国产一区在线| 亚洲精品乱码久久久久久蜜桃91| 久久九九久久九九| 久久影院午夜论| 黄色成人av在线| 欧美在线日韩在线| 久久日韩粉嫩一区二区三区 | 乱中年女人伦av一区二区| 国产亚洲欧美一区二区| 午夜精品久久| 久久人人爽人人爽| 亚洲电影专区| 欧美超级免费视 在线| 亚洲成人自拍视频| 日韩视频一区二区三区在线播放免费观看| 久久综合中文色婷婷| 欧美大片在线观看| 亚洲乱码精品一二三四区日韩在线| 牛牛影视久久网| 亚洲人成欧美中文字幕| 一区二区欧美日韩| 国产精品成人v| 午夜日韩电影| 欧美承认网站| 中文精品视频一区二区在线观看| 欧美午夜www高清视频| 性色av一区二区怡红| 免播放器亚洲一区| 99在线热播精品免费| 国产精品一页| 浪潮色综合久久天堂| 最新国产乱人伦偷精品免费网站| 亚洲视频在线观看网站| 国产麻豆日韩| 久久日韩精品| 一区二区不卡在线视频 午夜欧美不卡在| 午夜激情久久久| 国产尤物精品| 欧美日本视频在线| 久久国产一区二区| 日韩一级黄色av| 久热精品在线| 亚洲免费影视第一页| 精品盗摄一区二区三区| 欧美日韩成人一区二区| 国外精品视频| 蜜臀va亚洲va欧美va天堂| 亚洲激情视频在线观看| 欧美在线www| 亚洲肉体裸体xxxx137| 国产精品理论片| 另类专区欧美制服同性| 亚洲一区二区视频在线观看| 欧美激情免费在线| 欧美一区二区视频在线观看2020| 亚洲人妖在线| 国产一区二区三区成人欧美日韩在线观看| 免费毛片一区二区三区久久久| 亚洲性视频h| 亚洲激情婷婷| 免费观看30秒视频久久| 午夜免费在线观看精品视频| 亚洲人午夜精品| 一区二区三区在线观看欧美| 国产精品国产三级国产| 欧美99在线视频观看| 香蕉乱码成人久久天堂爱免费| 日韩一级精品视频在线观看| 欧美顶级艳妇交换群宴| 99re热精品| 亚洲国产高清一区| 国产一区二区三区四区三区四 | 欧美高清视频www夜色资源网| 午夜精品国产| 亚洲一区二区三区精品在线| 亚洲国产精品日韩| 欧美激情四色 | 亚洲尤物精选| 一区二区三区鲁丝不卡| 在线电影一区| 麻豆成人精品| 国产精品草草| 欧美在线电影| 亚洲欧美日韩精品在线| 亚洲视频福利| 一区二区三区鲁丝不卡| 亚洲精品日韩在线观看| 亚洲第一主播视频| 欧美~级网站不卡| 麻豆精品在线播放| 美女久久一区| 欧美sm视频| 欧美二区在线观看| 亚洲国产欧美日韩另类综合| 欧美激情一区二区三级高清视频| 欧美成人69av| 91久久精品国产91久久性色tv| 久久亚洲影院| 久久久久成人精品| 亚洲欧美综合| 在线亚洲一区二区| 亚洲人成网站777色婷婷| 国内伊人久久久久久网站视频| 欧美四级电影网站| 欧美区亚洲区| 欧美日本精品在线| 国产精品99久久久久久久久| 亚洲激情校园春色|