【我好惨】L2-005集合相似度(集合set,STL使用)

    科技2022-07-12  137

    集合相似度

    题目代码运行结果C++ 集合set回顾盲点思路

    题目

    代码

    #include<bits/stdc++.h> /* #include<iostream> #include<set> #include<vector> #include<cstdio> */ using namespace std; int main(){ int n; cin>>n; //整数集合个数 vector<set<int> > v(n); for(int i=0;i<n;i++){ int element_num; cin>>element_num; //第i+1个集合的元素个数 set<int> s; for(int j=0;j<element_num;j++){ int element; cin>>element; //向集合输元素 s.insert(element); //v[i].insert(element); } v[i]=s; } int k; cin>>k; for(int i=0;i<k;i++){ int a,b; cin>>a>>b; int set1=a-1,set2=b-1; //两集合的下标set1、set2 int nc=0; //两集合公共元素个数预设为0 int nt=v[set2].size(); //两集合所有元素个数预设为 set2本有的元素个数 /*注意这个东西--还没搞明白*/ set<int>::iterator it; for(it=v[set1].begin();it!=v[set1].end();it++){ if(v[set2].find(*it)==v[set2].end()) nt++; //set1中的该元素不在set2中,总数+1 else nc++; //该元素两集合都有,公共元素个数+1 } double ans=(double)nc/nt*100; printf("%.2f%%\n",ans); } return 0; }

    运行结果

    P1957口算练习题.OJ(洛谷)输入和输出

    C++ 集合set回顾

    【STL】C++ 集合 set

    盲点

    vector 容器 find 查询函数 像是自动挨个找,找不到就会等于最后一个元素; it 的类型不是简单的元素的类型,是要声明迭代器 iterator →集合set .元素输出.迭代器 vector<int>::iterator it = find( L.begin( ), L.end( ), ); //查找1 if ( it == L.end( ) ) //没找到 cout << "No" << endl; else //找到 cout << "Yes" << endl; } printf 输出% 头文件#include<cstdio> printf 函数中,%用于格式控制,如果想输出文本%,需要使用两个百分号,即printf("%%");

    但在本题中,Dev-C++尝试时,

    printf("%.2f%%\n",ans);

    printf("%.2f%\n",ans);

    皆能正常输出% ???

    思路

    Processed: 0.012, SQL: 8