Bzoj 3662: Clever Rabbit

来源:互联网 发布:公司数据库 编辑:程序博客网 时间:2024/06/17 23:42

传送门: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;}
原创粉丝点击