zoukankan      html  css  js  c++  java
  • 国庆 day 3 上午

    a
    【问题描述】
            你是能看到第一题的 friends 呢。
                            ——hja
        怎么快速记单词呢?也许把单词分类再记单词是个不错的选择。何大爷给
      出了一种分单词的方法,何大爷认为两个单词是同一类的当这两个单词的各个
      字母的个数是一样的,如 dog 和 god。现在何大爷给了你?个单词,问这里总共
      有多少类单词。
    【输入格式】
      第一行一个整数n代表单词的个数。
      接下来n行每行一个单词。
    【输出格式】
      一行一个整数代表答案。
    【样例输入】
      3
      AABAC
      CBAAA
      AAABB
    【样例输出】
      2
    【数据范围与规定】
      70%的数据,1 ≤ ? ≤ 100。
      对于100%的数据,1 ≤ ? ≤ 10000,所有单词由大写字母组成。
      P99 zhxb

    思路:很简单,sort一下,set记录就好。

    #include<set>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n;
    string s;
    set<string>s1;
    using namespace std;
    int main(){
        freopen("a.in","r",stdin);
        freopen("a.out","w",stdout);
        cin>>n;
        for(int i=1;i<=n;i++){
            cin>>s;
            sort(s.begin(),s.end());
            s1.insert(s);
        }
        cout<<s1.size();
    }
    View Code

    b
    【问题描述】
          你是能看到第二题的 friends 呢。
                          ——laekov
        长度为?的铁丝,你可以将其分成若干段,并把每段都折成一个三角形。你
      还需要保证三角形的边长都是正整数并且三角形两两相似,问有多少种不同的
      分法。
    【输入格式】
      一行一个整数n。
    【输出格式】
      一行一个整数代表答案对10 9 + 7取模之后的值。
    【样例输入 1
      6
    【样例输出 1】
      2
    【样例输入 2】
      9
    【样例输出 2】
      6
    【样例解释 2】
      (1,1,1),(2,2,2);(2,2,2),(1,1,1)算两种方案。
    【数据范围与规定】
      对于30%的数据,1≤n≤100。
      对于60%的数据,1 ≤n≤ 1000。
      对于100%的数据,1 ≤ n≤ 10^6 。
      P99 zhxc

    思路:打表+

    以下解题思路转自xxy大佬的博客

    设分成的每段长为Li,g=gcd(Li)

    那么一共有n/g 个单位

    设f[g]表示以g为周长,且三边gcd为1 的三角形的个数

    设h[n/g]表示把n/g个单位 分配给任意多个三角形的个数

    那么 ans=Σ f[g]*h[n/g]   (g|n)

    求f[g]:

    设g=a+b+c,且a<=b<=c

    对b和c的大小分两种情况讨论:

    ① b==c :

    ==> g=a+2b,那么b∈[ceil(g/3),floor((g-1)/2)]

    所以f[g]=floor((g-1)/2)- ceil(g/3) +1

    ② b<c :

    a,b,c 的每一种方案都可以看做由 a,b,c-1的每一种方案转移过来

    但有一种除外:a+b=c,因为此时a,b,c-1 合法,a,b,c 不合法

    当g为偶数时,a+b+a+b=g,g=2*(a+b),所以有floor(g/4)个

    所以f[g]=f[g-1]+ (b&1)? 0 : -g/4

    然后因为要求三边长互质,所以枚举g的每个因数k,f[g]-=f[k]

    求h[i]:

    把i个物品分成任意份的方案数=C(i-1,0)+C(i-1,1)+……+C(i-1,i-1)

    = 2^(i-1)

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define MAXN 1000010
    #define mod 1000000007
    using namespace std;
    int n,ans;
    int f[MAXN],dp[MAXN],more[MAXN];
    void pre(){
        f[1]=0;f[2]=0;f[3]=1;f[4]=0;f[5]=1;f[6]=2;f[7]=2;f[8]=1;f[9]=6;f[10]=3;
        f[11]=4;f[12]=10;f[13]=5;f[14]=6;f[15]=25;f[16]=6;f[17]=8;f[18]=40;f[19]=10;f[20]=16;
        f[21]=81;f[22]=14;f[23]=14;f[24]=144;f[25]=31;f[26]=19;f[27]=280;f[28]=32;f[29]=21;f[30]=569;
        f[31]=24;f[32]=32;f[33]=1062;f[34]=32;f[35]=123;f[36]=2098;f[37]=33;f[38]=40;f[39]=4147;f[40]=188;
        f[41]=40;f[42]=8305;f[43]=44;f[44]=74;f[45]=16731;f[46]=58;f[47]=52;f[48]=32880;f[49]=182;f[50]=593;
        f[51]=65620;f[52]=100;f[53]=65;f[54]=131222;f[55]=1153;f[56]=408;f[57]=262248;f[58]=91;f[59]=80;f[60]=526534;
        f[61]=85;f[62]=104;f[63]=1049329;f[64]=256;f[65]=4266;f[66]=2097406;f[67]=102;f[68]=168;f[69]=4194453;f[70]=9435;
        f[71]=114;f[72]=8389356;f[73]=120;f[74]=147;f[75]=16793845;f[76]=210;f[77]=2431;f[78]=33554771;f[79]=140;f[80]=33664;
        f[81]=67109568;f[82]=180;f[83]=154;f[84]=134222278;f[85]=65816;f[86]=198;f[87]=268435687;f[88]=1764;f[89]=176;f[90]=537003715;
        f[91]=8689;f[92]=304;f[93]=73742080;f[94]=236;f[95]=262493;f[96]=147486386;f[97]=208;f[98]=16762;f[99]=294970616;f[100]=525236;
        f[101]=225;f[102]=589935100;f[103]=234;f[104]=5060;f[105]=180951179;f[106]=299;f[107]=252;f[108]=359743304;f[109]=261;f[110]=2100625;
        f[111]=719476629;f[112]=74624;f[113]=280;f[114]=438953217;f[115]=4194803;f[116]=476;f[117]=877914883;f[118]=370;f[119]=131884;f[120]=764219541;
        f[121]=4412;f[122]=395;f[123]=511620533;f[124]=544;f[125]=16777781;f[126]=23520200;f[127]=352;f[128]=33792;f[129]=46480812;f[130]=33561658;
        f[131]=374;f[132]=92971720;f[133]=525301;f[134]=476;f[135]=253064929;f[136]=67120;f[137]=408;f[138]=371843557;f[139]=420;f[140]=135276738;
        f[141]=743685675;f[142]=534;f[143]=21939;f[144]=487573369;f[145]=268436226;f[146]=564;f[147]=976838685;f[148]=768;f[149]=481;f[150]=486371819;
        f[151]=494;f[152]=264124;f[153]=899095103;f[154]=4230111;f[155]=73742696;f[156]=797942289;f[157]=533;f[158]=660;f[159]=595846044;f[160]=148044530;
        f[161]=8390048;f[162]=191955045;f[163]=574;f[164]=940;f[165]=678420224;f[166]=728;f[167]=602;f[168]=784611668;f[169]=21091;f[170]=590005152;
        f[171]=534052443;f[172]=1034;f[173]=645;f[174]=67051138;f[175]=213425504;f[176]=2234048;f[177]=134100040;f[178]=836;f[179]=690;f[180]=629164408;
        f[181]=705;f[182]=67159441;f[183]=536397479;f[184]=4197128;f[185]=719477490;f[186]=72794800;f[187]=271076;f[188]=1232;f[189]=281905179;f[190]=439221006;
        f[191]=784;f[192]=299637156;f[193]=800;f[194]=992;f[195]=460352967;f[196]=268453912;f[197]=833;f[198]=169414077;f[199]=850;f[200]=773118105;
        f[201]=329377190;f[202]=1075;f[203]=536873117;f[204]=658901564;f[205]=511621583;f[206]=1118;f[207]=325897438;f[208]=33737152;f[209]=1059738;f[210]=733120196;
        f[211]=954;f[212]=1560;f[213]=270017566;f[214]=1206;f[215]=46481967;f[216]=624195158;f[217]=147486152;f[218]=1251;f[219]=80066391;f[220]=97166226;
        f[221]=361480;f[222]=160132539;f[223]=1064;f[224]=429287396;f[225]=539823443;f[226]=1344;f[227]=1102;f[228]=641067392;f[229]=1121;f[230]=376045827;
        f[231]=875181021;f[232]=268439796;f[233]=1160;f[234]=629865643;f[235]=743687047;f[236]=1930;f[237]=124161904;f[238]=180068149;f[239]=1220;f[240]=282249196;
        f[241]=1240;f[242]=8396278;f[243]=630864590;f[244]=2060;f[245]=334482250;f[246]=993285370;f[247]=1352967;f[248]=73746777;f[249]=986566337;f[250]=966267700;
        f[251]=1344;f[252]=963458550;f[253]=16792899;f[254]=1696;f[255]=845680875;f[256]=147618802;f[257]=1408;f[258]=892519773;f[259]=438956020;f[260]=834130603;
        f[261]=321910893;f[262]=1804;f[263]=1474;f[264]=902808123;f[265]=595847773;f[266]=878514327;f[267]=140132997;f[268]=2482;f[269]=1541;f[270]=613538991;
        f[271]=1564;f[272]=590463176;f[273]=321617640;f[274]=1972;f[275]=450507987;f[276]=129468687;f[277]=1633;f[278]=2030;f[279]=389587111;f[280]=593581177;
        f[281]=1680;f[282]=484194447;f[283]=1704;f[284]=2784;f[285]=503383384;f[286]=144739395;f[287]=23244429;f[288]=608926200;f[289]=526056;f[290]=335498669;
        f[291]=873525635;f[292]=2940;f[293]=1825;f[294]=795703352;f[295]=134102175;f[296]=719483184;f[297]=352487218;f[298]=2331;f[299]=21030745;f[300]=829570449;
        f[301]=92965331;f[302]=2394;f[303]=976373910;f[304]=440334209;f[305]=536399754;f[306]=133930833;f[307]=2002;f[308]=727053010;f[309]=905487848;f[310]=146550417;
        f[311]=2054;f[312]=797987002;f[313]=2080;f[314]=2587;f[315]=504510638;f[316]=3440;f[317]=2133;f[318]=243886012;f[319]=73765456;f[320]=196774796;
        f[321]=487764748;f[322]=752192960;f[323]=2754708;f[324]=829784319;f[325]=666295098;f[326]=2788;f[327]=951050268;f[328]=511628523;f[329]=487375739;f[330]=519846041;
        f[331]=2324;f[332]=3794;f[333]=243152828;f[334]=2926;f[335]=329379927;f[336]=896160545;f[337]=2408;f[338]=167812001;f[339]=216758643;f[340]=253287221;
        f[341]=294994281;f[342]=313785635;f[343]=949486563;f[344]=46489602;f[345]=205731144;f[346]=3139;f[347]=2552;f[348]=270962932;f[349]=2581;f[350]=747536014;
        f[351]=559517020;f[352]=691504452;f[353]=2640;f[354]=936178016;f[355]=270020632;f[356]=4356;f[357]=679251333;f[358]=3360;f[359]=2730;f[360]=460748045;
        f[361]=2624190;f[362]=3435;f[363]=669268872;f[364]=334172790;f[365]=80069625;f[366]=978753869;f[367]=2852;f[368]=389086576;f[369]=980748370;f[370]=879627900;
        f[371]=191697606;f[372]=62528248;f[373]=2945;f[374]=376928566;f[375]=234374381;f[376]=743696112;f[377]=342266271;f[378]=229553181;f[379]=3040;f[380]=86304704;
        f[381]=319912198;f[382]=3824;f[383]=3104;f[384]=456014180;f[385]=767315472;f[386]=3904;f[387]=372608253;f[388]=5168;f[389]=3201;f[390]=851593334;
        f[391]=34475148;f[392]=776813524;f[393]=118533489;f[394]=4067;f[395]=124165684;f[396]=461120268;f[397]=3333;f[398]=4150;f[399]=554019519;f[400]=24380486;
        f[401]=3400;f[402]=948240916;f[403]=368810794;f[404]=5600;f[405]=100772050;f[406]=671149427;f[407]=877942283;f[408]=939442208;f[409]=3536;f[410]=504928656;
        f[411]=585867209;f[412]=5824;f[413]=268206895;f[414]=934037804;f[415]=986570502;f[416]=669929746;f[417]=343454580;f[418]=778379431;f[419]=3710;f[420]=335610456;
        f[421]=3745;f[422]=4664;f[423]=861186921;f[424]=595859187;f[425]=81465024;f[426]=747606243;f[427]=72802206;f[428]=6282;f[429]=481777696;f[430]=939025622;
        f[431]=3924;f[432]=179917090;f[433]=3960;f[434]=293274650;f[435]=108338739;f[436]=6516;f[437]=45617065;f[438]=961563981;f[439]=4070;f[440]=85432001;
        f[441]=173222533;f[442]=218768539;f[443]=4144;f[444]=285247559;f[445]=140137771;f[446]=5208;f[447]=692440708;f[448]=181485242;f[449]=4256;f[450]=503663955;
        f[451]=46525528;f[452]=7000;f[453]=769745987;f[454]=5396;f[455]=624680383;f[456]=36952570;f[457]=4408;f[458]=5491;f[459]=414821823;f[460]=525420403;
        f[461]=4485;f[462]=195576137;f[463]=4524;f[464]=141492500;f[465]=927048725;f[466]=5684;f[467]=4602;f[468]=917587263;f[469]=658763101;f[470]=227909764;
        f[471]=263377072;f[472]=134116266;f[473]=185971000;f[474]=526752805;f[475]=140092690;f[476]=572044619;f[477]=245196579;f[478]=5980;f[479]=4840;f[480]=251051250;
        f[481]=597521289;f[482]=6080;f[483]=901381976;f[484]=384464122;f[485]=873531291;f[486]=81799863;f[487]=5002;f[488]=536414764;f[489]=855737404;f[490]=351802543;
        f[491]=5084;f[492]=734795572;f[493]=148864986;f[494]=532754414;f[495]=902725507;f[496]=368561549;f[497]=540044894;f[498]=845857446;f[499]=5250;f[500]=46222437;
        f[501]=691697246;f[502]=6594;f[503]=5334;f[504]=531075295;f[505]=976380035;f[506]=541933468;f[507]=156419868;f[508]=8832;f[509]=5461;f[510]=630889204;
        f[511]=160143072;f[512]=881647212;f[513]=809398314;f[514]=6912;f[515]=905494218;f[516]=227148798;f[517]=974799163;f[518]=759494920;f[519]=268176839;f[520]=176474293;
        f[521]=5720;f[522]=746957132;f[523]=5764;f[524]=9394;f[525]=401665841;f[526]=7238;f[527]=591513220;f[528]=693257650;f[529]=58726138;f[530]=839769236;
        f[531]=558933992;f[532]=504447131;f[533]=558270181;f[534]=581429430;f[535]=487771615;f[536]=329397982;f[537]=162838617;f[538]=7571;f[539]=461110827;f[540]=760194731;
        f[541]=6165;f[542]=7684;f[543]=651330217;f[544]=199950520;f[545]=951057387;f[546]=610609693;f[547]=6302;f[548]=10268;f[549]=678110480;f[550]=215598287;
        f[551]=689865933;f[552]=422847279;f[553]=248335828;f[554]=8027;f[555]=823273101;f[556]=10570;f[557]=6533;f[558]=286028190;f[559]=232588345;f[560]=550616676;
        f[561]=641688027;f[562]=8260;f[563]=6674;f[564]=856694326;f[565]=216766287;f[566]=8378;f[567]=643650873;f[568]=270040853;f[569]=6816;f[570]=10575752;
        f[571]=6864;f[572]=876871637;f[573]=953622009;f[574]=10147215;f[575]=164828100;f[576]=103131694;f[577]=7008;f[578]=720533540;f[579]=814460419;f[580]=422754714;
        f[581]=973145904;f[582]=628918743;f[583]=383454843;f[584]=80090949;f[585]=210412823;f[586]=8979;f[587]=7252;f[588]=678691589;f[589]=743716893;f[590]=70323870;
        f[591]=31225166;f[592]=39137685;f[593]=7400;f[594]=777599332;f[595]=205603231;f[596]=12136;f[597]=124871317;f[598]=366855643;f[599]=7550;f[600]=748441320;
        f[601]=7600;f[602]=878370138;f[603]=158233051;f[604]=12464;f[605]=22977276;f[606]=998908369;f[607]=7752;f[608]=876039115;f[609]=5804546;f[610]=515200081;
        f[611]=718646208;f[612]=352050226;f[613]=7905;f[614]=9856;f[615]=507385951;f[616]=504944356;f[617]=8008;f[618]=982261152;f[619]=8060;f[620]=442860405;
        f[621]=606159688;f[622]=10114;f[623]=280281152;f[624]=380560125;f[625]=81648331;f[626]=10244;f[627]=947552966;f[628]=13468;f[629]=757981013;f[630]=407166986;
        f[631]=8374;f[632]=124190605;f[633]=431761439;f[634]=10507;f[635]=319921830;f[636]=55344476;f[637]=994990070;f[638]=922911884;f[639]=267073321;f[640]=96687145;
        f[641]=8640;f[642]=454021625;f[643]=8694;f[644]=915428148;f[645]=420773432;f[646]=416481261;f[647]=8802;f[648]=888624547;f[649]=536487196;f[650]=543527195;
        f[651]=805064391;f[652]=14514;f[653]=8965;f[654]=264040138;f[655]=118543730;f[656]=41099551;f[657]=688210286;f[658]=456196476;f[659]=9130;f[660]=788540947;
        f[661]=9185;f[662]=11454;f[663]=632455164;f[664]=986597957;f[665]=216673288;f[666]=426834782;f[667]=846186064;f[668]=15232;f[669]=448618719;f[670]=277676648;
        f[671]=145682417;f[672]=864781405;f[673]=9520;f[674]=11872;f[675]=536767859;f[676]=291790663;f[677]=9633;f[678]=588871703;f[679]=747069207;f[680]=994065097;
        f[681]=177710923;f[682]=784023935;f[683]=9804;f[684]=64193468;f[685]=585878395;f[686]=444036983;f[687]=710804765;f[688]=79908296;f[689]=979502647;f[690]=332920397;
        f[691]=10034;f[692]=16340;f[693]=653685751;f[694]=12586;f[695]=343466095;f[696]=929250733;f[697]=95592236;f[698]=12731;f[699]=372677413;f[700]=505554620;
        f[701]=10325;f[702]=484673687;f[703]=203423644;f[704]=26131550;f[705]=583750068;f[706]=13024;f[707]=952767238;f[708]=249696771;f[709]=10561;f[710]=17689299;
        f[711]=210988695;f[712]=140169231;f[713]=133059369;f[714]=142721121;f[715]=741851795;f[716]=17490;f[717]=850488986;f[718]=13470;f[719]=10860;f[720]=308702450;
        f[721]=810995891;f[722]=394781562;f[723]=401912787;f[724]=17880;f[725]=359648052;f[726]=278574349;f[727]=11102;f[728]=223324365;f[729]=674663557;f[730]=41699365;
        f[731]=374737300;f[732]=288178886;f[733]=11285;f[734]=14076;f[735]=119111885;f[736]=741314328;f[737]=317619815;f[738]=899077274;f[739]=11470;f[740]=340571402;
        f[741]=176555384;f[742]=680009780;f[743]=11594;f[744]=622059992;f[745]=692453917;f[746]=14539;f[747]=859093140;f[748]=953913486;f[749]=975551267;f[750]=462624064;
        f[751]=11844;f[752]=460669231;f[753]=543654149;f[754]=456025416;f[755]=769759553;f[756]=964948885;f[757]=12033;f[758]=15010;f[759]=666496731;f[760]=357067089;
        f[761]=12160;f[762]=349134363;f[763]=902123092;f[764]=19904;f[765]=655334128;f[766]=15328;f[767]=670835577;f[768]=180320395;f[769]=12416;f[770]=686482083;
        f[771]=792861970;f[772]=20320;f[773]=12545;f[774]=562467585;f[775]=824643127;f[776]=873568555;f[777]=289679775;f[778]=15811;f[779]=126699245;f[780]=517585453;
        f[781]=80194428;f[782]=302914607;f[783]=959897208;f[784]=9112574;f[785]=263391723;f[786]=371078861;f[787]=13002;f[788]=21168;f[789]=742114163;f[790]=650995270;
        f[791]=433541506;f[792]=724438873;f[793]=682343776;f[794]=16467;f[795]=2185994;f[796]=21600;f[797]=13333;f[798]=81385569;f[799]=952901881;f[800]=170768862;
        f[801]=153870972;f[802]=16800;f[803]=320396310;f[804]=406087068;f[805]=579427728;f[806]=833193940;f[807]=494205098;f[808]=976420385;f[809]=13736;f[810]=509535625;
        f[811]=13804;f[812]=642419509;f[813]=976765784;f[814]=26683670;f[815]=855753189;f[816]=576240377;f[817]=476351470;f[818]=17476;f[819]=626184202;f[820]=795515423;
        f[821]=14145;f[822]=814011073;f[823]=14214;f[824]=905536183;f[825]=43630219;f[826]=141227885;f[827]=14352;f[828]=736405228;f[829]=14421;f[830]=832512453;
        f[831]=511841099;f[832]=324425848;f[833]=546181775;f[834]=23677747;f[835]=691713808;f[836]=175324608;f[837]=322020648;f[838]=18340;f[839]=14770;f[840]=767314431;
        f[841]=637159360;f[842]=18515;f[843]=189167254;f[844]=24274;f[845]=678873291;f[846]=328298371;f[847]=103072287;f[848]=629436117;f[849]=756609450;f[850]=195474478;
        f[851]=211094749;f[852]=53481170;f[853]=15265;f[854]=31016620;f[855]=568345655;f[856]=487816850;f[857]=15408;f[858]=850175264;f[859]=15480;f[860]=328639424;
        f[861]=666978539;f[862]=19404;f[863]=15624;f[864]=324264527;f[865]=268194598;f[866]=19584;f[867]=616828971;f[868]=82189470;f[869]=496800197;f[870]=728037434;
        f[871]=647313682;f[872]=951104277;f[873]=433958153;f[874]=955530808;f[875]=883697445;f[876]=534090545;f[877]=16133;f[878]=20130;f[879]=747373447;f[880]=305347883;
        f[881]=16280;f[882]=739910174;f[883]=16354;f[884]=526496827;f[885]=951951571;f[886]=20498;f[887]=16502;f[888]=136131504;f[889]=639854892;f[890]=721663891;
        f[891]=128450027;f[892]=27104;f[893]=450498982;f[894]=915295756;f[895]=162857622;f[896]=456853444;f[897]=839130012;f[898]=21056;f[899]=991045957;f[900]=768095880;
        f[901]=771039188;f[902]=126859099;f[903]=345818228;f[904]=216816631;f[905]=651349642;f[906]=644141987;f[907]=17252;f[908]=28082;f[909]=241025460;f[910]=847370936;
        f[911]=17404;f[912]=988882810;f[913]=946433209;f[914]=21812;f[915]=441507462;f[916]=28576;f[917]=237099395;f[918]=862554513;f[919]=17710;f[920]=127568390;
        f[921]=611272228;f[922]=22195;f[923]=350565947;f[924]=29652432;f[925]=766970575;f[926]=22388;f[927]=256047019;f[928]=396024127;f[929]=18096;f[930]=35461180;
        f[931]=709833501;f[932]=29580;f[933]=779999326;f[934]=22776;f[935]=541127788;f[936]=796981924;f[937]=18408;f[938]=556093119;f[939]=119924357;f[940]=342870726;
        f[941]=18565;f[942]=239842981;f[943]=330471863;f[944]=475244359;f[945]=388140789;f[946]=941357867;f[947]=18802;f[948]=207849885;f[949]=400835301;f[950]=869128616;
        f[951]=918419448;f[952]=140326942;f[953]=19040;f[954]=716536167;f[955]=953643625;f[956]=31120;f[957]=913775800;f[958]=23960;f[959]=171769805;f[960]=365139645;
        f[961]=769822937;f[962]=383588360;f[963]=669918431;f[964]=31640;f[965]=814482483;f[966]=167763046;f[967]=19602;f[968]=390506098;f[969]=52884710;f[970]=502564403;
        f[971]=19764;f[972]=234634222;f[973]=686945595;f[974]=24766;f[975]=570319034;f[976]=127176969;f[977]=20008;f[978]=217817386;f[979]=560723938;f[980]=566226326;
        f[981]=337727721;f[982]=25174;f[983]=20254;f[984]=243933741;f[985]=31248147;f[986]=223225457;f[987]=237502017;f[988]=814899512;f[989]=835294271;f[990]=585935671;
        f[991]=20584;f[992]=927533220;f[993]=968676492;f[994]=36205524;f[995]=124894767;f[996]=910792481;f[997]=20833;f[998]=26000;f[999]=209273186;f[1000]=523080925;
    }
    void work(){
        dp[3]=1;
        for(int i=4;i<=n;i++){
            dp[i]=dp[i-1]+(i-1)/2-i/3+(i%3?0:1);
            if(i%2==0)    dp[i]-=i/4;
            dp[i]%=mod;
            if(dp[i]<0)    dp[i]+=mod;
        }
        more[1]=1;
        for(int i=2;i<=n;i++){
            more[i]=(more[i-1]*2)%mod;
            for(int j=2;i*j<=n;j++){
                dp[i*j]-=dp[i];
                if(dp[i*j]<0)    dp[i*j]+=mod;    
            }
        }
        return ;
    }
    int main(){
        freopen("b.in","r",stdin);
        freopen("b.out","w",stdout);
        pre();
        scanf("%d",&n);
        if(n<=1000){
            cout<<f[n];
            return 0;
        }
        else{
            work();
            for(int i=1;i*i<=n;i++){
                if(n%i!=0)    continue;
                ans=(ans+1ll*dp[i]*more[n/i])%mod;
                if(i*i!=n)
                    ans=(ans+1ll*dp[n/i]*more[i])%mod;    
            }
            cout<<ans;
        }
    }
    View Code

    c
    【问题描述】
          你是能看到第三题的 friends 呢。
                          ——aoao
        在小学的时候,我们都学过正视图和左视图。现在何大爷用一些小方块摆了
      一个图形,并给出了你这个图形的左视图和正视图。现在何大爷希望知道,在给
      定正视图和左视图的情况下,原来的立体图形有多少种可能的情况?
    【输入格式】
      第一行两个整数n,m,代表在左视图和正视图中分别有多少列。
      第二n个整数,代表在左视图中从左至右每一列的高度。
      第三行m个整数,代表在正视图中从左至有每一列的高度。
    【输出格式】
      一行一个整数代表答案对10 9 + 9取模之后的值。
    【样例输入 1】
      2 2
      1 1
      1 1
    【样例输出 1】
      7
    【样例输入 2】
      4 5
      5 2 4 1
      5 2 4 0 1
    【样例输出 2】
      429287
    【数据规模与约定】
      对于20%的数据,1 ≤ n,m ≤ 5,每列的最大高度不超过5。
      对于40%的数据,n + m ≤ 18。
      对于100%的数据,1 ≤ n,m ≤ 50,每列最大高度不超过10000。

    以下解题思路转自xxy大佬的博客

    思路:容斥原理

    解决本题的关键:行交换。列交换对答案不影响

    将左视图按从下往上递减,正视图从左往右递减排列

    那整张图的高度从左下到右上呈阶梯状递减

    这样所有高度相同的呈现倒‘L’形,如下图所示蓝色部分

    如果我们按高度递减的顺序依次计算每个倒‘L’形的方案数,那么这些倒‘L’形相对独立

    答案就是所有倒‘L’形答案的乘积

     

    如何计算单个倒‘L’形的答案?——容斥原理

    假设上图为已经按高度排好序的图

    设当前正在处理高度为h的倒‘L’形

    令nn表示当前有nn行的左视图高度为h,mm表示当前有mm列的主视图高度为h

    n表示当前有n行的左视图高度>=h,m表示当前有m列的主视图高度>=h

    定义性质pk表示 在这nn行mm列中,有k行/列不满足看到的高度为h

    那根据容斥原理,

    不具有任何一个性质p的方案和=

    全集-Σ|pi|+Σ|pi∩pj|-Σ|pi∩pj∩pk|+…+(-1)^m*|p1∩p2∩…∩pm|

    也就是所有方案-所有1行/列不满足条件的方案+所有2行/列不满足条件的方案-……

    如何求有k行/列不满足条件的方案数?

    设现在要求在倒‘L’形中,有i行j列不满足条件的方案数A,i+j=k

    那么A分为两部分

    ① i行j列不能满足条件的部分:

    当前高度为h,不能满足条件,每一个各自可以填[0,h-1],每个格子有h种方案

    所以此时方案数=h^ (n*m-(n-i)*(m-j))

    ② 倒‘L’形中其他位置可以任意填的部分

     当前高度为h,任意填就是可以填[0,h],每个各自有h+1种方案

    所以此时的方案数=(h+1)^((n-i)*(m-j)-(n-nn)*(m-mm))

    这是选定i行j列,所以还要乘上在nn行中选i行,在mm列中选j列的方案

    终上所述,每个倒‘L’形 的答案为 (-1)^(i+j)* C(nn,i)* C(mm,j)* h^ (n*m-(n-i)*(m-j)) * (h+1)^((n-i)*(m-j)-(n-nn)*(m-mm))

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define MAXN 10001
    #define mod 1000000009
    using namespace std;
    int n,m;
    int c[51][51];
    int a[MAXN],b[MAXN];
    void pre(int k){
        for(int i=0;i<=k;i++)    c[i][0]=1;
        for(int i=1;i<=k;i++)
            for(int j=1;j<=i;j++)
                c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;
    }
    int pow(int a,int b){
        int res=1;
        for(;b;b>>=1,a=1ll*a*a%mod)
            if(b&1)    res=1ll*res*a%mod;
        return res;
    }
    int cal(int n,int m,int nn,int mm,int h){
        int res=0,tmp;
        for(int i=0;i<=nn;i++)
            for(int j=0;j<=mm;j++){
                tmp=1ll*pow(h,n*m-(n-i)*(m-j))*pow(h+1,(n-i)*(m-j)-(n-nn)*(m-mm))%mod*c[nn][i]%mod*c[mm][j]%mod;
                if((i+j)&1)    res=((res-tmp)%mod+mod)%mod;
                else res+=tmp,res%=mod;
            }
        return res;
    }
    int main(){
        freopen("c.in","r",stdin);
        freopen("c.out","w",stdout);
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++){
            int x;
            scanf("%d",&x);
            a[x]++;
        }
        for(int i=1;i<=m;i++){
            int x;
            scanf("%d",&x);
            b[x]++; 
        }
        pre(max(n,m));
        long long res=1;
        int nown=0,nowm=0;
        for(int i=10000;i>=0;i--)
            if(a[i]||b[i]){
                nown+=a[i];
                nowm+=b[i];
                res=1ll*res*cal(nown,nowm,a[i],b[i],i)%mod;
            }
        cout<<res;
    }
    View Code
    细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
  • 相关阅读:
    java的构造方法 java程序员
    No result defined for action cxd.action.QueryAction and result success java程序员
    大学毕业后拉开差距的真正原因 java程序员
    hibernate的回滚 java程序员
    验证码 getOutputStream() has already been called for this response异常的原因和解决方法 java程序员
    浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓 java程序员
    你平静的生活或许会在某个不可预见的时刻被彻底打碎 java程序员
    Spring配置文件中使用ref local与ref bean的区别. 在ApplicationResources.properties文件中,使用<ref bean>与<ref local>方法如下 java程序员
    poj1416Shredding Company
    poj1905Expanding Rods
  • 原文地址:https://www.cnblogs.com/cangT-Tlan/p/7642204.html
Copyright © 2011-2022 走看看