小R的并集大小期望计算 | 蛮力

问题描述

小R有 n 个集合,她想通过随机选择两个集合,并计算它们的并集,来求出这个并集大小的期望值。每个集合中的元素都是唯一的且互不相同。她需要计算出随机选择两个集合并集大小的期望值,并且要求结果保留两位小数。

保证输入至少有两个集合。

测试样例

样例1:

输入:n = 2,st = [[1, 2], [1, 3, 5]]

输出:'4.00'

样例2:

输入:n = 3,st = [[1, 4], [2, 5], [3, 6, 7]]

输出:'4.67'

样例3:

输入:n = 2,st = [[10, 20, 30], [10, 30, 50, 70]]

输出:'5.00'

题解:

题目不是很难,双重遍历整个数组,选取其中两个,并再次遍历其中数据存入set中,就可方便计算出其个数,然后记录总个数与选取个数,相除即为期望。

但是本题的难点在于,怎么将一个double数据转换成string数据,我也不知道,后来查了才发现一个stringstream的类型,可以通过ss << fixed << d来将double转换成string,并使用setprecision来控制小数位数即可。

代码:

cpp 复制代码
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<queue>
#include<stack>
#include<vector>
#include<unordered_set>
#include<unordered_map>
#include<map>
#include<set>
using namespace std;
typedef long long int ll;

string solution(int n, vector<vector<int>> st) {
    set<int> st1;
    int sum=0;
    int num=0;
    for(int i=0;i<n-1;i++){
        for(int j=i+1;j<n;j++){
            vector<int> vt1=st[i];
            vector<int> vt2=st[j];
            for(int k=0;k<vt1.size();k++){
                st1.insert(vt1[k]);
            }
            for(int k=0;k<vt2.size();k++){
                st1.insert(vt2[k]);
            }
            sum+=st1.size();
            num++;
            vt1.clear();vt2.clear();st1.clear();
        }
    }
    double as=0;
    string ans="";
    as=sum*1.0/num;
    //cout << as << "\n";
    stringstream ss;
    ss.setf(ios::fixed);
    ss << setprecision(2) << as;
    //cout << ss.str() << "\n";
    return ss.str();
}

int main() {
    cout << fixed << setprecision(2) << (solution(2, {{1, 2}, {1, 3, 5}}) == "4.00") << endl;
    cout << fixed << setprecision(2) << (solution(3, {{1, 4}, {2, 5}, {3, 6, 7}}) == "4.67") << endl;
    cout << fixed << setprecision(2) << (solution(2, {{10, 20, 30}, {10, 30, 50, 70}}) == "5.00") << endl;
    return 0;
}
相关推荐
2301_7657031420 分钟前
C++中的职责链模式实战
开发语言·c++·算法
StandbyTime28 分钟前
《算法笔记》学习记录-第一章
c++·算法·算法笔记
近津薪荼33 分钟前
优选算法——双指针8(单调性)
数据结构·c++·学习·算法
松☆34 分钟前
Dart 中的常用数据类型详解(含 String、数字类型、List、Map 与 dynamic) ------(2)
数据结构·list
格林威34 分钟前
Baumer相机铆钉安装状态检测:判断铆接是否到位的 5 个核心算法,附 OpenCV+Halcon 的实战代码!
人工智能·opencv·算法·计算机视觉·视觉检测·工业相机·堡盟相机
星空露珠1 小时前
速算24点检测生成核心lua
开发语言·数据库·算法·游戏·lua
历程里程碑1 小时前
Linux15 进程二
linux·运维·服务器·开发语言·数据结构·c++·笔记
happygrilclh1 小时前
高压高频电源的pid算法
算法
格林威2 小时前
Baumer相机铸件气孔与缩松识别:提升铸造良品率的 6 个核心算法,附 OpenCV+Halcon 实战代码!
人工智能·opencv·算法·安全·计算机视觉·堡盟相机·baumer相机
葫三生2 小时前
存在之思:三生原理与现象学对话可能?
数据库·人工智能·神经网络·算法·区块链