欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

K

最编程 2024-01-23 20:35:37
...

https://codeforces.com/gym/101982/attachments

K 打表暴力

/*#include<bits/stdc++.h>
using namespace std;

map<int,double> dmin,dmax;

bool legal(int n){
    int a[10]={};
    int cur=10;
    while(n){
        int t=n%10;
        if(t==0||a[t]||t>=cur)
            return false;
        cur=t;
        a[t]++;
        n/=10;
    }
    return true;
}

int main(){
    int cnt=0;
    freopen("Yinku.out","w",stdout);
    for(int i=1;i<=123456789;i++){
        if(legal(i)){
            //calc(i);
            printf("%d,",i);
            cnt++;
        }
    }
    cerr<<cnt<<endl;
}*/


/*int num[]={1,2,3,4,5,6,7,8,9,12,13,14,15,16,17,18,19,23,24,25,26,27,28,29,34,35,36,37,38,39,45,46,47,48,49,56,57,58,59,67,68,69,78,79,89,
123,124,125,126,127,128,129,134,135,136,137,138,139,145,146,147,148,149,156,157,158,159,167,168,169,178,179,189,234,235,236,237,238,239,245,
246,247,248,249,256,257,258,259,267,268,269,278,279,289,345,346,347,348,349,356,357,358,359,367,368,369,378,379,389,456,457,458,459,467,468,
469,478,479,489,567,568,569,578,579,589,678,679,689,789,1234,1235,1236,1237,1238,1239,1245,1246,1247,1248,1249,1256,1257,1258,1259,1267,1268,
1269,1278,1279,1289,1345,1346,1347,1348,1349,1356,1357,1358,1359,1367,1368,1369,1378,1379,1389,1456,1457,1458,1459,1467,1468,1469,1478,1479,
1489,1567,1568,1569,1578,1579,1589,1678,1679,1689,1789,2345,2346,2347,2348,2349,2356,2357,2358,2359,2367,2368,2369,2378,2379,2389,2456,2457,
2458,2459,2467,2468,2469,2478,2479,2489,2567,2568,2569,2578,2579,2589,2678,2679,2689,2789,3456,3457,3458,3459,3467,3468,3469,3478,3479,3489,
3567,3568,3569,3578,3579,3589,3678,3679,3689,3789,4567,4568,4569,4578,4579,4589,4678,4679,4689,4789,5678,5679,5689,5789,6789,12345,12346,12347,
12348,12349,12356,12357,12358,12359,12367,12368,12369,12378,12379,12389,12456,12457,12458,12459,12467,12468,12469,12478,12479,12489,12567,12568,
12569,12578,12579,12589,12678,12679,12689,12789,13456,13457,13458,13459,13467,13468,13469,13478,13479,13489,13567,13568,13569,13578,13579,13589,
13678,13679,13689,13789,14567,14568,14569,14578,14579,14589,14678,14679,14689,14789,15678,15679,15689,15789,16789,23456,23457,23458,23459,23467,
23468,23469,23478,23479,23489,23567,23568,23569,23578,23579,23589,23678,23679,23689,23789,24567,24568,24569,24578,24579,24589,24678,24679,24689,
24789,25678,25679,25689,25789,26789,34567,34568,34569,34578,34579,34589,34678,34679,34689,34789,35678,35679,35689,35789,36789,45678,45679,45689,
45789,46789,56789,123456,123457,123458,123459,123467,123468,123469,123478,123479,123489,123567,123568,123569,123578,123579,123589,123678,123679,
123689,123789,124567,124568,124569,124578,124579,124589,124678,124679,124689,124789,125678,125679,125689,125789,126789,134567,134568,134569,
134578,134579,134589,134678,134679,134689,134789,135678,135679,135689,135789,136789,145678,145679,145689,145789,146789,156789,234567,234568,
234569,234578,234579,234589,234678,234679,234689,234789,235678,235679,235689,235789,236789,245678,245679,245689,245789,246789,256789,345678,
345679,345689,345789,346789,356789,456789,1234567,1234568,1234569,1234578,1234579,1234589,1234678,1234679,1234689,1234789,1235678,1235679,
1235689,1235789,1236789,1245678,1245679,1245689,1245789,1246789,1256789,1345678,1345679,1345689,1345789,1346789,1356789,1456789,2345678,2345679,
2345689,2345789,2346789,2356789,2456789,3456789,12345678,12345679,12345689,12345789,12346789,12356789,12456789,13456789,23456789,123456789};

double p[13];

map<int,double> dmin,dmax;

int link(vector<int> s,int ex1,int ex2=-1,int ex3=-1,int ex4=-1){
    int ans=0;
    int n=s.size();
    for(int i=0;i<n;i++){
        if(i==ex1||i==ex2||i==ex3||i==ex4)
            continue;
        else{
            ans*=10;
            ans+=s[i];
        }
    }
    return ans;
}

vector<int> findnextstate(int state,int sum){
    vector<int>ans;

    //cout<<"state="<<state<<" has next states:\n  ";
    vector<int> s;
    while(state){
        s.push_back(state%10);
        state/=10;
    }
    reverse(s.begin(),s.end());
    int n=s.size();
    for(int i=0;i<n;i++){
        if(s[i]==sum){
            ans.push_back(link(s,i));
            break;
        }
    }

    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
            if(s[i]+s[j]==sum){
                ans.push_back(link(s,i,j));
                break;
            }
        }
    }

    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
            for(int k=j+1;k<n;k++){
                if(s[i]+s[j]+s[k]==sum){
                    ans.push_back(link(s,i,j,k));
                    break;
                }
            }
        }
    }


    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
            for(int k=j+1;k<n;k++){
                for(int l=k+1;l<n;l++){
                    if(s[i]+s[j]+s[k]+s[l]==sum){
                        ans.push_back(link(s,i,j,k,l));
                        break;
                    }
                }
            }
        }
    }

    for(auto i:ans){
        cout<<i<<",";
    }
    cout<<endl;
    return ans;
}

void calc(int state){
    double minans=0;
    double maxans=0;
    vector<int> ns;
    for(int sum=2;sum<=12;sum++){
        ns=findnextstate(state,sum);
        if(ns.size()==0){
            minans+=p[sum]*state;
            maxans+=p[sum]*state;
        }
        else{
            double nmax=-1.0;
            double nmin=1e30;
            for(auto nsi:ns){
                nmax=max(nmax,dmax[nsi]);
                nmin=min(nmin,dmin[nsi]);
            }

            maxans+=p[sum]*nmax;
            minans+=p[sum]*nmin;
        }
    }

    dmax[state]=maxans;
    dmin[state]=minans;

    cerr<<"state="<<state<<" dmax="<<maxans<<" dmin="<<minans<<endl;
    printf("dmax[%d]=%.10f;\ndmin[%d]=%.10f;\n",state,maxans,state,minans);
    cout<<"dmax["<<state<<"]="<<maxans<<";\n";
    cout<<"dmin["<<state<<"]="<<minans<<";\n";
}

int ntop=511;
int main(){
    freopen("Yinku.out","w",stdout);

    for(int sum=2;sum<=7;sum++){
        p[sum]=1.0*(sum-1)/36;
    }
    for(int sum=8;sum<=12;sum++){
        p[sum]=1.0*(13-sum)/36;
    }

    for(int sum=2;sum<=12;sum++){
        cout<<"p["<<sum<<"]="<<p[sum]<<endl;
    }

    for(int i=0;i<ntop;i++){
        calc(num[i]);
    }
}*/

#include<bits/stdc++.h>
using namespace std;
map<int,double> dmax,dmin;

void init(){
    dmax[1]=1.0000000000;
    dmin[1]=1.0000000000;
    dmax[2]=1.9444444444;
    dmin[2]=1.9444444444;
    dmax[3]=2.8333333333;
    dmin[3]=2.8333333333;
    dmax[4]=3.6666666667;
    dmin[4]=3.6666666667;
    dmax[5]=4.4444444444;
    dmin[5]=4.4444444444;
    dmax[6]=5.1666666667;
    dmin[6]=5.1666666667;
    dmax[7]=5.8333333333;
    dmin[7]=5.8333333333;
    dmax[8]=6.8888888889;
    dmin[8]=6.8888888889;
    dmax[9]=8.0000000000;
    dmin[9]=8.0000000000;
    dmax[12]=11.0277777778;
    dmin[12]=11.0277777778;
    dmax[13]=11.2500000000;
    dmin[13]=11.2500000000;
    dmax[14]=11.3611111111;
    dmin[14]=11.3611111111;
    dmax[15]=11.3611111111;
    dmin[15]=11.3611111111;
    dmax[16]=11.2500000000;
    dmin[16]=11.2500000000;
    dmax[17]=11.9722222222;
    dmin[17]=11.9722222222;
    dmax[18]=13.6388888889;
    dmin[18]=13.6388888889;
    dmax[19]=15.4166666667;
    dmin[19]=15.4166666667;
    dmax[23]=18.7145061728;
    dmin[23]=18.7145061728;
    dmax[24]=18.2638888889;
    dmin[24]=18.2638888889;
    dmax[25]=17.7006172840;
    dmin[25]=17.7006172840;
    dmax[26]=18.4691358025;
    dmin[26]=18.4691358025;
    dmax[27]=19.2361111111;
    dmin[27]=19.2361111111;
    dmax[28]=21.4614197531;
    dmin[28]=21.4614197531;
    dmax[29]=23.7993827160;
    dmin[29]=23.7993827160;
    dmax[34]=24.0509259259;
    dmin[34]=24.0509259259;
    dmax[35]=24.8672839506;
    dmin[35]=24.8672839506;
    dmax[36]=25.6805555556;
    dmin[36]=25.6805555556;
    dmax[37]=26.4907407407;
    dmin[37]=26.4907407407;
    dmax[38]=29.2762345679;
    dmin[38]=29.2762345679;
    dmax[39]=32.1759259259;
    dmin[39]=32.1759259259;
    dmax[45]=32.0277777778;
    dmin[45]=32.0277777778;
    dmax[46]=32.8842592593;
    dmin[46]=32.8842592593;
    dmax[47]=33.7361111111;
    dmin[47]=33.7361111111;
    dmax[48]=37.0833333333;
    dmin[48]=37.0833333333;
    dmax[49]=40.5462962963;
    dmin[49]=40.5462962963;
    dmax[56]=40.0802469136;
    dmin[56]=40.0802469136;
    dmax[57]=40.9722222222;
    dmin[57]=40.9722222222;
    dmax[58]=44.8827160494;
    dmin[58]=44.8827160494;
    dmax[59]=47.2716049383;
    dmin[59]=47.2716049383;
    dmax[67]=48.1990740741;
    dmin[67]=48.1990740741;
    dmax[68]=50.7854938272;
    dmin[68]=50.7854938272;
    dmax[69]=53.4351851852;
    dmin[69]=53.4351851852;
    dmax[78]=56.1250000000;
    dmin[78]=56.1250000000;
    dmax[79]=59.0370370370;
    dmin[79]=59.0370370370;
    dmax[89]=68.6265432099;
    dmin[89]=68.6265432099;
    dmax[123]=72.9483024691;
    dmin[123]=72.4930555556;
    dmax[124]=53.4598765432;
    dmin[124]=53.4598765432;
    dmax[125]=47.3634259259;
    dmin[125]=47.3634259259;
    dmax[126]=48.0941358025;
    dmin[126]=48.0941358025;
    dmax[127]=55.7924382716;
    dmin[127]=55.7924382716;
    dmax[128]=70.1481481481;
    dmin[128]=70.1481481481;
    dmax[129]=84.7322530864;
    dmin[129]=84.7322530864;
    dmax[134]=61.6057098765;
    dmin[134]=60.9737654321;
    dmax[135]=51.5339506173;
    dmin[135]=51.5339506173;
    dmax[136]=52.3125000000;
    dmin[136]=52.3125000000;
    dmax[137]=60.5864197531;
    dmin[137]=60.5864197531;
    dmax[138]=76.0979938272;
    dmin[138]=76.0979938272;
    dmax[139]=91.8425925926;
    dmin[139]=91.8425925926;
    dmax[145]=71.3016975309;
    dmin[145]=70.5331790123;
    dmax[146]=56.5061728395;
    dmin[146]=56.5061728395;
    dmax[147]=65.3541666667;
    dmin[147]=65.3541666667;
    dmax[148]=82.0262345679;
    dmin[148]=82.0262345679;
    dmax[149]=94.7970679012;
    dmin[149]=94.7970679012;
    dmax[156]=81.6242283951;
    dmin[156]=80.7638888889;
    dmax[157]=70.0956790123;
    dmin[157]=70.0956790123;
    dmax[158]=83.5439814815;
    dmin[158]=83.5439814815;
    dmax[159]=92.7901234568;
    dmin[159]=92.7901234568;
    dmax[167]=97.0331790123;
    dmin[167]=96.1304012346;
    dmax[168]=79.8456790123;
    dmin[168]=79.8456790123;
    dmax[169]=89.6550925926;
    dmin[169]=89.6550925926;
    dmax[178]=108.4174382716;
    dmin[178]=107.7114197531;
    dmax[179]=94.9969135802;
    dmin[179]=94.9969135802;
    dmax[189]=130.2307098765;
    dmin[189]=129.6041666667;
    dmax[234]=75.8672839506;
    dmin[234]=75.8672839506;
    dmax[235]=102.4124657064;
    dmin[235]=100.8269032922;
    dmax[236]=90.7445130316;
    dmin[236]=90.7445130316;
    dmax[237]=104.7986111111;
    dmin[237]=104.7986111111;
    dmax[238]=131.3254458162;
    dmin[238]=131.3254458162;
    dmax[239]=151.4512174211;
    dmin[239]=151.4512174211;
    dmax[245]=80.6995884774;
    dmin[245]=80.6995884774;
    dmax[246]=128.6604938272;
    dmin[246]=126.8414351852;
    dmax[247]=109.8263888889;
    dmin[247]=109.8263888889;
    dmax[248]=130.6715534979;
    dmin[248]=130.6715534979;
    dmax[249]=151.7037037037;
    dmin[249]=151.7037037037;
    dmax[256]=99.6547496571;
    dmin[256]=99.6547496571;
    dmax[257]=149.5511831276;
    dmin[257]=147.5733024691;
    dmax[258]=129.4416152263;
    dmin[258]=129.4416152263;
    dmax[259]=144.1989026063;
    dmin[259]=144.1989026063;
    dmax[267]=119.7229938272;
    dmin[267]=119.7229938272;
    dmax[268]=171.1649519890;
    dmin[268]=169.5565843621;
    dmax[269]=150.2122770919;
    dmin[269]=150.2122770919;
    dmax[278]=140.3369341564;
    dmin[278]=140.3369341564;
    dmax[279]=186.3179012346;
    dmin[279]=185.0694444444;
    dmax[289]=177.2290809328;
    dmin[289]=177.2290809328;
    dmax[345]=113.5054012346;
    dmin[345]=113.5054012346;
    dmax[346]=133.7564300412;
    dmin[346]=133.7564300412;
    dmax[347]=201.3310185185;
    dmin[347]=198.2947530864;
    dmax[348]=173.6041666667;
    dmin[348]=173.6041666667;
    dmax[349]=202.9302983539;
    dmin[349]=202.9302983539;
    dmax[356]=148.3471364883;
    dmin[356]=148.3471364883;
    dmax[357]=159.3734567901;
    dmin[357]=159.3734567901;
    dmax[358]=238.1693244170;
    dmin[358]=235.6723251029;
    dmax[359]=209.6433470508;
    dmin[359]=209.6433470508;
    dmax[367]=174.8269032922;
    dmin[367]=174.8269032922;
    dmax[368]=195.5067729767;
    dmin[368]=195.5067729767;
    dmax[369]=256.4344135802;
    dmin[369]=254.4699074074;
    dmax[378]=201.5748456790;
    dmin[378]=201.5748456790;
    dmax[379]=222.9701646091;
    dmin[379]=222.9701646091;
    dmax[389]=249.8924039781;
    dmin[389]=249.8924039781;
    dmax[456]=202.5902777778;
    dmin[456]=202.5902777778;
    dmax[457]=216.6087962963;
    dmin[457]=216.6087962963;
    dmax[458]=254.9200102881;
    dmin[458]=254.9200102881;
    dmax[459]=330.7530864198;
    dmin[459]=328.0833333333;
    dmax[467]=235.4837962963;
    dmin[467]=235.4837962963;
    dmax[468]=261.6674382716;
    dmin[468]=261.6674382716;
    dmax[469]=287.9881687243;
    dmin[469]=287.9881687243;
    dmax[478]=268.3657407407;
    dmin[478]=268.3657407407;
    dmax[479]=295.2870370370;
    dmin[479]=295.2870370370;
    dmax[489]=328.1095679012;
    dmin[489]=328.1095679012;
    dmax[567]=301.6936728395;
    dmin[567]=301.6936728395;
    dmax[568]=333.3815157750;
    dmin[568]=333.3815157750;
    dmax[569]=349.3172153635;
    dmin[569]=349.3172153635;
    dmax[578]=340.7096193416;
    dmin[578]=340.7096193416;
    dmax[579]=356.9629629630;
    dmin[579]=356.9629629630;
    dmax[589]=395.4831961591;
    dmin[589]=395.4831961591;
    dmax[678]=399.6203703704;
    dmin[678]=399.6203703704;
    dmax[679]=418.5442386831;
    dmin[679]=418.5442386831;
    dmax[689]=443.6514060357;
    dmin[689]=443.6514060357;
    dmax[789]=486.1234567901;
    dmin[789]=486.1234567901;
    dmax[1234]=119.4546467764;
    dmin[1234]=110.0102023320;
    dmax[1235]=54.2540294925;
    dmin[1235]=43.0411522634;
    dmax[1236]=23.1703103567;
    dmin[1236]=11.6005015432;
    dmax[1237]=25.5880486968;
    dmin[1237]=23.2014317558;
    dmax[1238]=230.4202246228;
    dmin[1238]=227.6310871056;
    dmax[1239]=401.2454561043;
    dmin[1239]=398.0474537037;
    dmax[1245]=20.0291923868;
    dmin[1245]=13.9230967078;
    dmax[1246]=22.9655778464;
    dmin[1246]=14.9202246228;
    dmax[1247]=25.8203446502;
    dmin[1247]=17.8825874486;
    dmax[1248]=26.5225051440;
    dmin[1248]=26.5225051440;
    dmax[1249]=199.7329818244;
    dmin[1249]=199.7329818244;
    dmax[1256]=231.4379286694;
    dmin[1256]=225.4654921125;
    dmax[1257]=199.9688786008;
    dmin[1257]=192.4221107682;
    dmax[1258]=167.3787294239;
    dmin[1258]=161.7572659465;
    dmax[1259]=134.0133744856;
    dmin[1259]=134.0133744856;
    dmax[1267]=377.3278892318;
    dmin[1267]=370.9889403292;
    dmax[1268]=310.0932355967;
    dmin[1268]=304.0210905350;
    dmax[1269]=277.7365826475;
    dmin[1269]=273.2816786694;
    dmax[1278]=490.5290637860;
    dmin[1278]=484.6957304527;
    dmax[1279]=458.3088134431;
    dmin[1279]=452.8862740055;
    dmax[1289]=674.2302383402;
    dmin[1289]=668.2459705075;
    dmax[1345]=135.5098593964;
    dmin[1345]=127.9563614540;
    dmax[1346]=100.7694615912;
    dmin[1346]=96.2972393690;
    dmax[1347]=401.0482253086;
    dmin[1347]=387.5869341564;
    dmax[1348]=365.5969221536;
    dmin[1348]=354.5354938272;
    dmax[1349]=329.1183984911;
    dmin[1349]=324.7734910837;
    dmax[1356]=66.5548268176;
    dmin[1356]=62.2280092593;
    dmax[1357]=69.6111968450;
    dmin[1357]=67.8202160494;
    dmax[1358]=408.8004115226;
    dmin[1358]=401.5396090535;
    dmax[1359]=373.7729766804;
    dmin[1359]=368.9358710562;
    dmax[1367]=260.4957133059;
    dmin[1367]=255.6905435528;
    dmax[1368]=225.5781464335;
    dmin[1368]=224.2401834705;
    dmax[1369]=492.1507201646;
    dmin[1369]=486.5778034979;
    dmax[1378]=419.4829818244;
    dmin[1378]=414.8127143347;
    dmax[1379]=422.7452846365;
    dmin[1379]=421.8224451303;
    dmax[1389]=655.1735253772;
    dmin[1389]=650.1018518519;
    dmax[1456]=354.8067986968;
    dmin[1456]=346.6737825789;
    dmax[1457]=158.3001543210;
    dmin[1457]=155.2708333333;
    dmax[1458]=
						

上一篇: 算24点

下一篇: 挑战洛谷P1236,轻松玩转24点!