1 条题解

  • 0
    @ 2025-8-24 21:48:07

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar AoPSer
    骑士亮剑 决斗zzy——被奶穿了

    搬运于2025-08-24 21:48:07,当前版本为作者最后更新于2021-12-26 08:02:25,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    这题刚刚看一下:不就是一道枚举吗?

    后来发现:好像会超时耶

    于是:加优化!

    将一幢楼里的妹子看做一个集合,只要将每幢楼里的妹子横,纵坐标求和然后按要求来就行了

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    int n,rxa,rxc,rya,ryc,rza,rzc,rp=2333333,f[45][45];
    long long x,y,z,num;
    double mzx,mzy,a[45][45],b[45][45],ans;
    int main(){
        scanf("%d%d%d%d%d%d%d",&n,&rxa,&rxc,&rya,&ryc,&rza,&rzc);
        for(register int i=1;i<=2*n;i++)
    	{
            x=(y*rxa+rxc)%rp;
            y=(z*rya+ryc)%rp;
            z=(x*rza+rzc)%rp;
            if(i%2==1)mzx=(double)(x%20)+((double)(y%10)/10.000000000)+((double)(z%10)/100.00000000);
            else
    		{
                mzy=(double)(x%20)+((double)(y%10)/10.000000000)+((double)(z%10)/100.00000000);
          /*rt*/
                a[(int)mzx][(int)mzy]+=mzx;
                b[(int)mzx][(int)mzy]+=mzy;
                /*求和,也可以取平均值*/
                f[(int)mzx][(int)mzy]++;
            }
        }
        for(register int i=0;i<=20;i++)
            for(register int j=0;j<=20;j++)
                for(register int k=i+1;k<=20;k++)
                    for(register int l=j+1;l<=20;l++){
                        ans+=(a[k][l]+b[k][l])*(double)f[i][j]-(a[i][j]+b[i][j])*(double)f[k][l];
                        num+=f[i][j]*f[k][l];
                    }//按要求来就是了
        printf("%.5f",ans/num);
    }
    
    • 1

    信息

    ID
    1882
    时间
    1000ms
    内存
    125MiB
    难度
    4
    标签
    递交数
    0
    已通过
    0
    上传者