Bzoj 3662: Clever Rabbit

傳送門:http://www.lydsy.com/JudgeOnline/problem.php?id=3662
題意:
聰明的兔子定義了三個函數:
g(x) 表示將 x 十進制表示中各位數字從高位到低位降序排列組成的數字。
L(x) 表示將 x 十進制表示中各位數字從高位到低位升序排列組成的數字。
f(x)=g(x)L(x)
如果一個數 xf(x) 相等,兔子們稱它爲幸運數。現在兔子們希望計算在所有的 n 位數字中,所有幸運
數的平方的和。結果對 p 取模後輸出,注意這裏數字可以包含前導 0 .
數據範圍: 1n30 ;1p2×109
題解: 一看數據範圍只有 30 就猜想是個打表題,30 個數 分成 10 類一共有 C930+9=211915132 種情況,再 O(n) 算一下感覺相當輕鬆嘛,然後就拿了個暴力打了個表(只用了7min多 ),然後用python算了一下平方水過。
打表程序:

#include<bits/stdc++.h>
const int N = 50;
int n, t[N], a[N], b[N], c[N], d[N];
void dfs(int dep, int last) {
    if (!dep) {
        for (int i = last + 1; i <= n; i++) t[i] = dep;
        for (int i = 1; i <= n; i++)
            a[i] = t[i], b[i] = t[n - i + 1];
        for (int i = n; i > 0; i--) {
            c[i] = a[i] - b[i];
            if (c[i] < 0) c[i] += 10, a[i - 1]--;
        }
        for (int i = 1; i <= n; i++) d[i] = c[i];
        std::sort(c + 1, c + n + 1);
        bool suc = 1;
        for (int i = 1; i <= n; i++)
            if (c[i] != b[i]) suc = 0;
        if (!d[1]) suc = 0;
        if (suc) {
            for (int i = 1; i <= n; i++)
                printf("%d", d[i]);
            printf("\n");
        };
        return;
    }
    for (int pos = last; pos <= n; pos++) {
        for (int i = last + 1; i <= pos; i++) t[i] = dep;
        dfs(dep - 1, pos);
    }
}
int main() {
    freopen("test.out", "w", stdout);
    for (n = 3; n <= 30; n++) dfs(9, 0);
    return 0;
}

表:

#include<bits/stdc++.h>
typedef long long ll;
const char a[240][50] = {
"495",
"6174",
"631764",
"549945",
"63317664",
"97508421",
"864197532",
"554999445",
"6333176664",
"9753086421",
"9975084201",
"86431976532",
"633331766664",
"975330866421",
"997530864201",
"999750842001",
"555499994445",
"8643319766532",
"63333317666664",
"97533308666421",
"97755108844221",
"99753308664201",
"99975308642001",
"99997508420001",
"864333197666532",
"555549999944445",
"6333333176666664",
"9753333086666421",
"9775531088644221",
"9975333086664201",
"9977551088442201",
"9997533086642001",
"9999753086420001",
"9999975084200001",
"86433331976666532",
"98765420987543211",
"633333331766666664",
"975333330866666421",
"977553310886644221",
"997533330866664201",
"997755310886442201",
"886644219977553312",
"999753330866642001",
"999775510884422001",
"999975330866420001",
"999997530864200001",
"555554999999444445",
"999999750842000001",
"8643333319766666532",
"9876543209876543211",
"9987654209875432101",
"63333333317666666664",
"97533333308666666421",
"97755333108866644221",
"97775551108884442221",
"99753333308666664201",
"99775533108866442201",
"88664432199776553312",
"99975333308666642001",
"99977553108864422001",
"99997533308666420001",
"99997755108844220001",
"99999753308664200001",
"99999975308642000001",
"99999997508420000001",
"864333333197666666532",
"987654332098766543211",
"998765432098765432101",
"999876542098754321001",
"555555499999994444445",
"6333333333176666666664",
"9753333333086666666421",
"9775533331088666644221",
"9777555311088864442221",
"9975333333086666664201",
"9977553331088666442201",
"8866443321997766553312",
"9977755511088844422201",
"9997533333086666642001",
"9997755331088664422001",
"9999753333086666420001",
"9999775531088644220001",
"9999975333086664200001",
"9999977551088442200001",
"9999997533086642000001",
"9999999753086420000001",
"9999999975084200000001",
"86433333331976666666532",
"98765433320987666543211",
"98776554210988754432211",
"87765443219997765543222",
"99876543320987665432101",
"99987654320987654321001",
"99998765420987543210001",
"633333333331766666666664",
"975333333330866666666421",
"977553333310886666644221",
"977755533110888664442221",
"997533333330866666664201",
"997755333310886666442201",
"886644333219977666553312",
"997775553110888644422201",
"999753333330866666642001",
"999775533310886664422001",
"999777555110888444222001",
"999975333330866666420001",
"999977553310886644220001",
"999997533330866664200001",
"999997755310886442200001",
"999999753330866642000001",
"999999775510884422000001",
"999999975330866420000001",
"555555549999999944444445",
"999999997530864200000001",
"999999999750842000000001",
"8643333333319766666666532",
"9876543333209876666543211",
"9877655432109887654432211",
"9987654333209876665432101",
"9987765542109887544322101",
"9998765433209876654321001",
"9999876543209876543210001",
"9999987654209875432100001",
"63333333333317666666666664",
"97533333333308666666666421",
"97755333333108866666644221",
"97775553331108886664442221",
"97777555511108888444422221",
"99753333333308666666664201",
"99775533333108866666442201",
"88664433332199776666553312",
"99777555331108886644422201",
"99975333333308666666642001",
"99977553333108866664422001",
"99977755531108886444222001",
"98876654422099877554332111",
"99997533333308666666420001",
"99997755333108866644220001",
"99997775551108884442220001",
"99999753333308666664200001",
"99999775533108866442200001",
"99999975333308666642000001",
"99999977553108864422000001",
"99999997533308666420000001",
"99999997755108844220000001",
"99999999753308664200000001",
"99999999975308642000000001",
"99999999997508420000000001",
"864333333333197666666666532",
"987654333332098766666543211",
"987765543321098876654432211",
"998765433332098766665432101",
"998776554321098876544322101",
"888666444221999777555333112",
"999876543332098766654321001",
"999877655421098875443221001",
"999987654332098766543210001",
"999998765432098765432100001",
"999999876542098754321000001",
"555555554999999999444444445",
"6333333333333176666666666664",
"9753333333333086666666666421",
"9775533333331088666666644221",
"9777555333311088866664442221",
"9777755553111088886444422221",
"9975333333333086666666664201",
"9977553333331088666666442201",
"8866443333321997766666553312",
"9977755533311088866644422201",
"9977775555111088884444222201",
"9997533333333086666666642001",
"9997755333331088666664422001",
"9997775553311088866444222001",
"9887665443220998776554332111",
"9999753333333086666666420001",
"9999775533331088666644220001",
"9999777555311088864442220001",
"9988766544220998775543321101",
"9999975333333086666664200001",
"9999977553331088666442200001",
"9999977755511088844422200001",
"9999997533333086666642000001",
"9999997755331088664422000001",
"9999999753333086666420000001",
"9999999775531088644220000001",
"9999999975333086664200000001",
"9999999977551088442200000001",
"9999999997533086642000000001",
"9999999999753086420000000001",
"9999999999975084200000000001",
"86433333333331976666666666532",
"98765433333320987666666543211",
"98776554333210988766654432211",
"98777655542110988875444322211",
"99876543333320987666665432101",
"99877655433210988766544322101",
"88866644432219997776555333112",
"99987654333320987666654321001",
"99987765543210988765443221001",
"99998765433320987666543210001",
"99998776554210988754432210001",
"99999876543320987665432100001",
"99999987654320987654321000001",
"99999998765420987543210000001",
"633333333333331766666666666664",
"975333333333330866666666666421",
"977553333333310886666666644221",
"977755533333110888666664442221",
"977775555331110888866444422221",
"997533333333330866666666664201",
"997755333333310886666666442201",
"886644333333219977666666553312",
"997775553333110888666644422201",
"997777555531110888864444222201",
"999753333333330866666666642001",
"999775533333310886666664422001",
"999777555333110888666444222001",
"988766544332209987766554332111",
"999777755551110888844442222001",
"999975333333330866666666420001",
"999977553333310886666644220001",
"999977755533110888664442220001",
"998876654432209987765543321101",
"999997533333330866666664200001",
"999997755333310886666442200001",
"999997775553110888644422200001",
"999887665442209987755433211001",
"999999753333330866666642000001",
"999999775533310886664422000001",
"999999777555110888444222000001",
"999999975333330866666420000001",
"999999977553310886644220000001",
"999999997533330866664200000001",
"999999997755310886442200000001",
"999999999753330866642000000001",
"999999999775510884422000000001",
"555555555499999999994444444445",
"999999999975330866420000000001",
"999999999997530864200000000001",
"999999999999750842000000000001"};
const char b[240][100] = {
"245025",
"38118276",
"399125751696",
"302439503025",
"4009126574416896",
"9507892165913241",
"746837374314891024",
"308024383950308025",
"40109126657434168896",
"95122694735494589241",
"99502304817039808401",
"7470486567228198747024",
"401109126665743341688896",
"951270298993538545349241",
"995067825033593903368401",
"999501746081708465684001",
"308580243828395030858025",
"74706976586522786987307024",
"4011109126666574333416888896",
"9512746299419353745452949241",
"9556061305145494774445096841",
"9950722589455358294978968401",
"9995062338063359834781284001",
"9999501690208170891416840001",
"747071876588452278369872907024",
"308635802438272839503086358025",
"40111109126666657433334168888896",
"95127506299461935373454528949241",
"95561008065049668570499916696841",
"99507270189897535818549734968401",
"99551525722474149881524917724401",
"99950667818501535873902337284001",
"99995061789366335987922572840001",
"99999501684620817089590168400001",
"7470720876588645227833698728907024",
"9754608382846640980368833592190521",
"401111109126666665743333341688888896",
"951275106299466193537334545288949241",
"955610475625440086847980994632696841",
"995072746189941753581745497294968401",
"995515660402100926897454395713724401",
"786137972819603947653817133802169344",
"999506722578945353586295017897284001",
"999551072164207014992193295852844001",
"999950662341406153587834278132840001",
"999995061734496633598836701728400001",
"308641358024382717283950308641358025",
"999999501684062081708963501684000001",
"74707210876588664522783336987288907024",
"97546105776558451477762536198750190521",
"99753236616042441898259107581461274201",
"4011111109126666666574333333416888888896",
"9512751106299466619353733345452888949241",
"9556105151225479128684707409941792696841",
"9560058394646073678827699299778287412841",
"9950727506189946175358173454972894968401",
"9955157007158503604688838503503673724401",
"7861381537308773292563068821222378169344",
"9995067270178989735358618550173497284001",
"9995511125635806052690149483611812844001",
"9999506667817850135358673902233732840001",
"9999551026808380301499259737626088440001",
"9999950661793696615358787868257328400001",
"9999995061729009663359884114617284000001",
"9999999501684006208170896395016840000001",
"747072110876588666452278333369872888907024",
"975461079713460632527773510161850330190521",
"997532388355433622927798475842097241274201",
"999753099439362021989828133000368549642001",
"308641913580243827161728395030864191358025",
"40111111109126666666657433333334168888888896",
"95127511106299466661935373333454528888949241",
"95561051907225483032868469834099413392696841",
"95600587861402060719001879260553249447412841",
"99507275106189946617535817334549728894968401",
"99551570474718543872468874781034583273724401",
"78613817182198790227056283753212108138169344",
"99555605039063806967483170330778229541684401",
"99950672746178994173535861745501729497284001",
"99955111660311809956468924254390771412844001",
"99995066722577894533535866295021789732840001",
"99995510672159176565269018988801585688440001",
"99999506662341740613535867834227813328400001",
"99999551022272797630149926377843016884400001",
"99999950661738925661535878831230173284000001",
"99999995061728460966335988415906172840000001",
"99999999501684000620817089639950168400000001",
"7470721110876588666645227833333698728888907024",
"9754610819082460850632777323581618366130190521",
"9756807661796400235648312858643836896994348521",
"7702773023602651752221045798702477092750141284",
"9975323905749125841030779573236407255041274201",
"9997531016613321140072780069806431946349642001",
"9999753085721693979998982835522459079186420001",
"401111111109126666666665743333333341688888888896",
"951275111106299466666193537333334545288888949241",
"955610519467225483423286846974340994129392696841",
"956005882528958099423020179019365487961047412841",
"995072751106189946661753581733345497288894968401",
"995515705150318547899246887387410345379273724401",
"786138173631098791920505628144032120965738169344",
"995556054385739766031860227966099328949141684401",
"999506727506178994617353586173455017289497284001",
"999551117007067850346846891518503862367412844001",
"999555159703505580296348321037085826962172444001",
"999950667270177898973353586618550217349732840001",
"999955107125627140591646892829479481181688440001",
"999995066667817785013353586673902223373328400001",
"999995510626811513616526901939284562612884400001",
"999999506661794129661353586787862825733284000001",
"999999551021819239363014992641825105768844000001",
"999999950661733448566153587883567061732840000001",
"308641969135802438271606172839503086419691358025",
"999999995061728406096633598841635061728400000001",
"999999999501684000062081708963999501684000000001",
"74707211110876588666664522783333336987288888907024",
"97546108212772460872443277732083816183524130190521",
"97568076835489971397436211016436917021832794348521",
"99753239079686026062841077954580164058833041274201",
"99755460524157615821362631506084625711723637054201",
"99975310188352692361881077979545842947724349642001",
"99997530879439109891787278009202865416857186420001",
"99999753084349927175799898283774470130160864200001",
"4011111111109126666666666574333333333416888888888896",
"9512751111106299466666619353733333345452888888949241",
"9556105195067225483462328684697343409941289392696841",
"9560058829204518103293422017812869654835077047412841",
"9560450361727980162959012160992148553111606518572841",
"9950727511106189946666175358173333454972888894968401",
"9955157051906318548301924688737834103453339273724401",
"7861381738120098792089850562812090321209541738169344",
"9955560547852495405938298021905940588836145141684401",
"9995067275106178994661735358617334550172889497284001",
"9995511170474627854385884689142781038578327412844001",
"9995551601038173536563146023197010372934958172444001",
"9776592789707363270932431312255349047784783285716321",
"9999506672746177899417335358661745502172949732840001",
"9999551071660302780994284689192254390277141688440001",
"9999555115169949757629234832143748662736297284440001",
"9999950666722577789453335358666295022178973328400001",
"9999955106672158673655164689286988352158572884400001",
"9999995066662341774061335358667834222781333284000001",
"9999995510622276747321652690194332500301728844000001",
"9999999506661739368566135358678830683017332840000001",
"9999999551021773883536301499264222918617688440000001",
"9999999950661732900856615358788361146617328400000001",
"9999999995061728400609663359884163950617284000000001",
"9999999999501684000006208170896399995016840000000001",
"747072111110876588666666452278333333369872888888907024",
"975461082149672460874624327773205638161835104130190521",
"975680768572425661613615001098949417168871190794348521",
"997532390819055026085022107795430581640574613041274201",
"997554605461526974919523401123665713922403501637054201",
"789728049086172641827061680987604839357826913283604544",
"999753101905746382584061907797680236428105504349642001",
"999755325810393737379934063152810664991392605727442001",
"999975308816613049013966107798176806316994637186420001",
"999997530865721688766958727800942508763907940864200001",
"999999753084212750495379989828379669255238508642000001",
"308641974691358024382716050617283950308641974691358025",
"40111111111109126666666666657433333333334168888888888896",
"95127511111106299466666661935373333333454528888888949241",
"95561051951067225483466232868469733434099412889392696841",
"95600588295960118103680462201780396296548306237047412841",
"95604503656394735761629412335210148161086582722518572841",
"99507275111106189946666617535817333334549728888894968401",
"99551570519466318548342192468873774341034532939273724401",
"78613817383010098792106785056281185903212095301738169344",
"99555605482520051409928941802181687365883908105141684401",
"99556005028172397936291900816499254863311560731861284401",
"99950672751106178994666173535861733345501728889497284001",
"99955111705150227854789788468914187410385737927412844001",
"99955516014384849136589825802230634099284014918172444001",
"97765927917066710180811936910998391958364276361285716321",
"99995066727506177899461733535866173455021728949732840001",
"99995510717007058785034548468918318503898236741688440001",
"99995551155703416913616274602323705041693896257284440001",
"99775457074948714286873022931427737108800500368791852201",
"99999506667270177789897333535866618550221734973328400001",
"99999551067125626274059028468919629479068118172884400001",
"99999555110716594175362523483214775267074030528844400001",
"99999950666667817778501333535866673902222337333284000001",
"99999955106626811826961516468928739239256261328844000001",
"99999995066661794172966133535866787862282573332840000001",
"99999995510621823270692165269019437290470577288440000001",
"99999999506661733892456613535867883512306173328400000001",
"99999999551021769347953630149926422695942176884400000001",
"99999999950661732846085661535878836159066173284000000001",
"99999999995061728400060966335988416399506172840000000001",
"99999999999501684000000620817089639999950168400000000001",
"7470721111110876588666666645227833333333698728888888907024",
"9754610821518672460874842432777320536381618350904130190521",
"9756807685941782561635232880109867998971687364770794348521",
"9757025234395929755579278721646108081993870227477187928521",
"9975323908212745026087240210779542783816405732413041274201",
"9975546054835220544139339478112097143919089321281637054201",
"7897280492642617530993995145896529355043466712689283604544",
"9997531019079683282606279990779765280164279683304349642001",
"9997553258324130675271732120112586791614442552385727442001",
"9999753088188352418236183990779790245843032772437186420001",
"9999755312339017349535791206315303088523341462992964420001",
"9999975308679439084679174610779819902851921685740864200001",
"9999997530864349946654475872780094473098613016308642000001",
"9999999753084199032827337998982837989147946075086420000001",
"401111111111109126666666666665743333333333341688888888888896",
"951275111111106299466666666193537333333334545288888888949241",
"955610519511067225483466623286846973334340994128889392696841",
"956005882963516118103719166220178030722965483017837047412841",
"956045036603062291365496452353512124149210421293882518572841",
"995072751111106189946666661753581733333345497288888894968401",
"995515705195066318548346219246887377343410345328939273724401",
"786138173831910098792108478505628118359032120952901738169344",
"995556054829195611410328006180218079669658834627705141684401",
"995560050321639073532162541193561018816548662272691861284401",
"999506727511106178994666617353586173333455017288889497284001",
"999551117051906227854830178846891417834103857333927412844001",
"999555160147851604740592493780222172740592394814518172444001",
"977659279190660179082799887471097567766383529192141285716321",
"999555560494816839713625189681653925886411160073986168444001",
"999950667275106177899466173353586617334550217288949732840001",
"999955107170474618785438574846891822781038977832741688440001",
"999955511561038084509654978580223463810332405495857284440001",
"997754570769684648996059171671120059416056647856348791852201",
"999995066672746177789941733353586661745502217294973328400001",
"999995510671660301878099414846891872254390227714172884400001",
"999995551111169941251321587460232410544213393630128844400001",
"999775343503472849388467082093144795732920270257281387422001",
"999999506666722577778945333353586666295022217897333284000001",
"999999551066672158623365502846891966988307215857328844000001",
"999999555110271258617135852348321481530715407060888444000001",
"999999950666662341777406133353586667834222278133332840000001",
"999999955106622277142292151646892874327966030173288440000001",
"999999995066661739412856613353586678830628301733328400000001",
"999999995510621777923029216526901943769451461772884400000001",
"999999999506661733344845661353586788355670661733284000000001",
"999999999551021768894395363014992642273635021768844000000001",
"308641975246913580243827160495061728395030864197524691358025",
"999999999950661732840608566153587883616350661732840000000001",
"999999999995061728400006096633598841639995061728400000000001",
"999999999999501684000000062081708963999999501684000000000001"};
int main() {
    int n, p, len;
    scanf("%d%d", &n, &p);
    ll ans = 0, t;
    for (int i = 0; i < 240; i++)
        if (strlen(a[i]) == n) {
            t = 0; len = strlen(b[i]);
            for (int j = 0; j < len; j++)
                t = (t * 10 + b[i][j] - '0') % p;
            ans += t;
        }
    printf("%lld\n", ans % p);
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章