1 条题解

  • 0
    @ 2025-8-24 23:16:13

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 粥2414
    人类的赞歌就是「勇气」的赞歌,人类的伟大就是「勇气」的伟大!

    搬运于2025-08-24 23:16:13,当前版本为作者最后更新于2025-05-19 11:45:32,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    阅读理解题。

    题目描述

    有一个随机变量 xx,给出其二进制下位数 nn,然后给出 2n2^n 个二元组 (a,b)(a,b),其中第 kk 个二元组表示 xx(a+bi)(abi)(a+bi)\cdot(a-bi) 的概率等于 k1k-1,其中 ii 为虚数。

    xx 的二进制每一位是 0011 的概率。

    思路

    读懂了题目这题就没有任何难度了。运用小学二年级就学过的平方差公式和虚数相关知识可以得到:

    (a+bi)(abi)=a2b2i2=a2+b2(a+bi)\cdot(a-bi)=a^2-b^2i^2\\ =a^2+b^2

    然后二进制分解 kk 的每一位,如果当前位置为 11 那么答案加上对应的概率即可。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    #define ull unsigned long long
    #define ll long long
    #define dd double
    int n;
    dd ans[1ll<<9],a,b;
    int main() {
        cin>>n;
    	for(int p=0;p<(1ll<<n);p++){
    		cin>>a>>b;
    		a=a*a+b*b;
    		int k=p,cnt=0;
    		while(k){
    			if(k&1){
    				ans[cnt]+=a;
    			}
    			k>>=1;
    			cnt++;
    		}
    	}
    	for(int i=0;i<n;i++){
    		cout<<1-ans[i]<<' '<<ans[i]<<endl;
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    12279
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者