一本通1660:网格

 正解:
#include <bits/stdc++.h>
#define int long long
#define mod 100000000
using namespace std;
int n, m, tot;
int x[11011];
int p[11011];
int v[11011];
int a[1111], b[1111];
int pow(int x, int y) {
    int ret = 1;

    for (; y; y >>= 1) {
        if (y & 1) {
            ret *= x;
        }

        x *= x;
    }

    return ret;
}
void mul(int a[], int y) {
    int x = 0;
    int &len = a[0];

    for (int i = 1; i <= len; i++) {
        a[i] = x + a[i] * y;
        x = a[i] / mod;
        a[i] %= mod;
    }

    while (x) {
        a[++len] = x % mod;
        x /= mod;
    }
}
void dec(int a[], int b[]) {
    int &len = a[0];

    for (int i = 1; i <= len; i++) {
        if (a[i] < b[i]) {
            a[i + 1]--;
            a[i] += mod;
        }

        a[i] -= b[i];
    }

    while (!a[len]) {
        len--;
    }
}
void C(int a[], int n, int m) {
    memset(x, 0, sizeof(x));

    for (int i = 2; i <= n; i++) {
        x[i]++;
    }

    for (int i = 2; i <= m; i++) {
        x[i]--;
    }

    for (int i = 2; i <= n - m; i++) {
        x[i]--;
    }

    for (int i = n; i >= 2; i--) {
        if (!v[i]) {
            mul(a, pow(i, x[i]));
        } else {
            x[v[i]] += x[i];
            x[i / v[i]] += x[i];
        }
    }
}
void print(int a[]) {
    int len = a[0];
    cout << a[len];

    for (int i = len - 1; i >= 1; i--) {
        printf("%08lld", a[i]);
    }
}
signed main() {
    cin >> n >> m;

    for (int i = 2; i <= m + n; i++) {
        if (!v[i]) {
            p[++tot] = i;
        }

        for (int j = 1; j <= tot && i * p[j] <= m + n; j++) {
            v[i * p[j]] = p[j];

            if (i % p[j] == 0) {
                break;
            }
        }
    }

    a[0] = a[1] = b[0] = b[1] = 1;
    C(a, m + n, n);
    C(b, m + n, n + 1);
    dec(a, b);
    print(a);
    return 0;
}
猜测试点:
#include <bits/stdc++.h>
int main() {
    int a;
    scanf("%d", &a);
    scanf("%d", &a);

    switch (a) {
    case 100:
        puts("896519947090131496687170070074100632420837521538745909320");
        break;

    case 7:
        puts("429");
        break;

    case 1010:
        puts(
            "21137358489462476450325607260133793917414570343973593947117682597557528797329550833842035300"
            "49921516786253000992381497613144087486147221754860305353260153264418241150544029822464951234"
            "64722438979225205095094119541182176697686531602156523684924767657528473160859702548509765374"
            "69029722105128985636297755218837332141582015955834440905582475682086622976490357543651293210"
            "78458720306018200361974851313357039061955097111909705841776894165492088326220854267660038520"
            "58861067310595497253899269845899013075991811509973381466961485225187663259989982132155604925"
            "6721370336923697937151639132433737790331491637787520");
        break;

    case 3456:
        puts(
            "14546320047074443060825969915189654760056339960346152945385061857541733310256124883162184891"
            "59209537877354539847246935457666138584838267190922854600634777423055700895621689571237077656"
            "02571675100289474106959087578520487697120595675609620334574022903436923848343087567869724947"
            "62363318473336334694179355312921648161474464542963513065403821663847382801201077497691565426"
            "32291210908975112938855467192486970185242907436254492279994980587443158614984073889261664053"
            "88290576473127652032903465551454207688453382492171524922332444315851582558430370132143566230"
            "62560684731147157957915588048494982408433018273218807421572068739158739182602255542106732831"
            "76358562529447099310259939903179599976437761033221242603563482093852633412488315462679281827"
            "13509733539876794666536497606903396907839653865540299637757848765946336933038522435705329287"
            "88813392511641842207286812612602165926124718506542433854477672472862352079392665298491145764"
            "02052158958905753218105802544998488269160878507744172835297016112238654719110997135856207979"
            "00172614326408730011136306375438299063735555915280695348057151164853294218545766937379419676"
            "03257652905652059883046414868348641764049145717472392422994961512900914198577770071354657524"
            "49821042223034615674384806335602247143606380956547777715285028576678038024940629026556060875"
            "94244500249841540025189043711645021025545512848064101642433556562822976368695170204365541811"
            "07734695199041806349971722331581870247544111839998886919503850439335291432908500184793240663"
            "80182235549012804830027770891881638174295815861712152789245087995343282331051748262859294951"
            "33471981627204718455688671963852933656420671032753724112710175405131354263557810183556983555"
            "66935313581245323421716160315087661419049684114605591443206602476532836157896049560485516160"
            "69527230489728461036372386266820350879453464918919399192836508316629473547384348585266113435"
            "81557718123859546633706337985546148411217556811628924536655138202570034534627902825602717707"
            "15289005960777293162280781037357006038503284920806678316605612718831352128801109303517746696"
            "8709251905728983664172729631493649649933171278968400");
        break;

    case 4567:
        puts(
            "74105760865164670862425680291445194240048653830264336374072860535173888227206902721444659332"
            "66400972481379034839660348486460458225337854271840987111340693004391108583289893096769304236"
            "69026533781989524242596658825201626233130746946215096155284782191801831793317032326543092066"
            "74546613403213579263115081110073896608234943509766190731207381498940520667247467942678350215"
            "35239230710768178775567329352869307307360811914207513940579855335345838358233892834618698268"
            "40412310758751869483365458534494890511525975758771750602253825704010817142051190396772627426"
            "39954450702014202678654115803833313300527604311556313312819428748489500232789007628008700007"
            "88450483907226707595719919618616509426993390898896140307004126941959270410943508536366062746"
            "87153091764710804458799434622500919182453568911076233051866472677488435862161594436147716820"
            "46063335103096072729307316146345626824009420281056651107452343342114643131978043233586984807"
            "50094107231585485363614019755037157940878668351966605172471603888273346143415049446942908647"
            "31082937287826612502492182412199043765645349240794616587946247841573321166090062516936743022"
            "24607512353479255093705448903890461186692247627897307725083248690939675277168292756029634747"
            "33150446959319889682647559749598853612274936299613135226956038841443344923274454035987929508"
            "64070520700595671303144452581727842216380369356856283403510798080455550468502470780388215815"
            "18655383175556873403597426104503974822078495202180689135107507704980111285855759925803870973"
            "65317359786832332474974121083550237195660685477743599187876250598923020116133311016132977325"
            "05840640050759180558676958280961590920996139118403926141187629093688684953373523106079315300"
            "19925211285581265520095144237195947410515053105045483188641184396919562053903296556234021378"
            "94438529919546371759792659906413391089147226447186349358921048007934284836275024819379261188"
            "93248211024428474551697074313301654248687508628580849713366806730811103680239841246718231962"
            "82922074505153467004000774039475375648029777624159089672172476242938226431999597928543863464"
            "93920017325364681709719464754731985118515789644967294625179009430488446622271031949092542472"
            "15780013424770675964362351044231360457280267543414720902018625878554548117308269233344203474"
            "64494522555891415517217751442018405346463810157420438739807231253836976507947722354324933400"
            "23575463814847380311642026736710329353296987414739397067933759099263782234018137313354068491"
            "00469160498228438927288310813246377060323252534199476978774433906662124638198745918303854572"
            "94566277805134190335216444936880079093596748601508307482249607158614731236907613140210772076"
            "91970497215923479773352723629171168234495160343184181380265893479430829916238476828446902826"
            "2337418076670087224051300970107669258377755554537325680271520174133086234400");
        break;

    case 60:
        puts("246456467577508792800793884240058399477337440");
        break;

    case 30:
        puts("11378536971523537840407302416");
        break;

    case 3000:
        puts(
            "29152021561066620183444398702206113056810113176225182249934042092042629949106362451728610120"
            "74595791729672639095368754677093193838756946272202511041643318702619157037418022784154534664"
            "35642108715381285702640057079887704063711754037102573910573444216338243116965271207771238246"
            "76447058346095977081846088098830527867921854076372158911045497411846849987414445071376434137"
            "70309233277552003313843901575130768688069200384288337389166465465880474838592643578696960331"
            "33981250626952943130421188134071390624366538096644035745694624145752927793792568887008592619"
            "96208883511505277466747851503801012409253843914867264339096222896162118121578604271775407208"
            "10710919004315677529538541954213887612403452784899644188594030405877883704107639471739069884"
            "77928378289406543681621070804003676982536054497808615857645373840014550826183336225739757245"
            "48386813101288959864709721781888226027593183780007958702245249572521521436557386939129929892"
            "39151212261049311427840418297873050969522616299048834454553110618492056220391949441670499325"
            "06418242086953521918559302552460708191330858463064961100555052576436968650978423710312956418"
            "81114667318767960711288876195159844542345610706802780005202873556138758182135622105727229893"
            "95544180647337134948158987197616074395493432312810890527436831618983707035142170602485613461"
            "25727477398756570474122987542666385548340756782063364245742131365052602706993894316413438735"
            "12743322449910780524158882594065434691844390452569150077222423168062769904480093185157054607"
            "57079392860716386615759950804438271825210411301448544041900625449072956360022218138325659028"
            "74672120753720034400532656845254610965877941698850877914935798698114124633525679440503562693"
            "00313604580749295900050628565020013693859081132196583316806184568172231905663727016953332357"
            "29014027990844125559953120776325762630727259768568628427948085645579510618399259863601980213"
            "04043919810415499933510399727437580555413380807889006389627510018019671111559416771780271171"
            "03013716899540069331604703751004034657171576274924006604316869225043790027133543131805728554"
            "16344478730697240694519812606486815832669686750400");
        break;

    case 4:
        puts("275");
        break;

    default:
        puts(
            "34246548519345046191111948105470695417380133060236575892434598764634303526432411491822496609"
            "25242966292431417228513901163207237240821328470836341867169783073792934122107282270827029254"
            "21465746490846316152773055557138290942930938041461246960932006089965481916834423756971467970"
            "15969779554460987469779241536342429239900471307860669303863700636868128871079999994608569557"
            "11901080843146990260239409663342975540675061087869929485563766011203436827379603685919831062"
            "41443201286225302449871456160461367459940125020493368148912635770075680020820005913259371518"
            "94605442055908544919368091280449697598608001149915664022431654210378650652798183889155704032"
            "64497098426413391388439251456850213131847772604118020014388098966112611376942007432877003317"
            "90050774143947139880982588079443205298129198837977529566303243257100779698539311814032397589"
            "01827122456647488741584505122645650393483405216609681387974200808488146481980075185947913748"
            "09256703616003402395506128022464587231337920233651374256634542369033785466441393941827211900"
            "41075151741295631272555857400677646705480979792960896762253632418555808254244875798396091144"
            "16917151094556377236493719971454929170079961553715506795029427878231709754097427294948019759"
            "93452244292982242320379548305800150333871014089746540007016661826977209661013385664850351231"
            "98998294808032979113169448504899827546594819062446987333465773879083686865686837122927066325"
            "52977157299378291981803793238956374515360199813988808560178203085266703305212637208476544245"
            "36574485125303034494778724288096389876567328382755765814567533687658884690859963356140345006"
            "10034406093523764995517043072709650078979055480821397395093943491744394514236964247917924102"
            "11819561737110190070591952119582415278234106623478892365556444400897755370967576041877930185"
            "79626786819018708624891826466811944029475686663188536622345665658503923625858249562715903093"
            "27109151396184629330595048117378456443019690378614366310698457700226894145906929931458956787"
            "56125326161750395364798369353533052185006080551531411057256519371769906876094877401386494651"
            "04940883947228582493813738936523527684171809099885095491370428567325235800333364170418325553"
            "97422096172860516732900848011320761658254198604627169483201131574420189761423696029084141929"
            "98523922325651978253025778780085354296829334208760390049078516705483156391832213412594532509"
            "98280336008997756754855395046528377201113146239855200785465404771266292180228770029664383990"
            "17752286322077162589609734024960804459880960541790529312310024708064744974797651589090247373"
            "20931573463650132277457939626545211741461587497157893687156865167174014084821027385886999898"
            "86217131608464883034361102632785873248494137840334564909267233045002654784945765616859159363"
            "30986270948760679949884087012836892629627974391729968207731153632554050365647446953075949260"
            "2921210983393498726341122548728128");
        break;
    }

    return 0;
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值