pat(A) 1063. Set Similarity(STL)

代码:

#include<cstdio>
#include<cstring>
#include<set>
using namespace std;

set<int> st[55];

int main()
{
    int n,m,k;
    while(scanf("%d",&n)==1)
    {
        double dp[100][100];
        for(int i=0; i<55; i++)
        {
            for(int j=0; j<55; j++)
            {
                dp[i][j]=-1.0;
            }
        }
        for(int i=1; i<=n; i++)
        {
            st[i].clear();
            scanf("%d",&m);
            for(int j=0; j<m; j++)
            {
                int x;
                scanf("%d",&x);
                st[i].insert(x);
            }
        }
        scanf("%d",&k);
        while(k--)
        {
            int x,y;
            char c='%';
            scanf("%d%d",&x,&y);
            if(st[x].size()==0&&st[y].size()!=0)
            {
                printf("0.0");
                printf("%c
",c);
                continue;
            }
            if(st[x].size()!=0&&st[y].size()==0)
            {
                printf("0.0");
                printf("%c
",c);
                continue;
            }
            if(x==y)
            {
                printf("100.0");
                printf("%c
",c);
                continue;
            }
            set<int>::iterator it;
            int cnt=0;
            //printf("%lf
",dp[x][y]);
            if(dp[x][y]==-1.0)
            {
                //printf("-----
");
                for(it=st[x].begin(); it!=st[x].end(); it++)
                {

                    if(st[y].find(*it)!=st[y].end())
                        cnt++;
                }
                dp[x][y]=cnt*1.0/(st[x].size()+st[y].size()-cnt);
            }

            //printf("%d
",cnt);
            printf("%.1lf",dp[x][y]*100);
            //char c='%';
            printf("%c",c);
            printf("
");
        }
    }
    return 0;
}


原文地址:https://www.cnblogs.com/wzzkaifa/p/7128149.html