PAT A1063

最近都是最后一个case超时啊,一开始的思路是设set数组存数据,C=A|B,|A|+|B|-|C|/|C|
,然后改成只遍历其中一个+find的方法,统计出相同的个数和总个数
第一次提交

#include
#include
using namespace std;
set s[55];
int main()
{
    int n,m,t,num,a,b;
    scanf("%d",&n);
    for(int i=0;itotal;
        for(set::iterator it=s[a].begin();it!=s[a].end();it++)
            total.insert(*it);
        for(set::iterator it=s[b].begin();it!=s[b].end();it++)
            total.insert(*it);
        int nc=s[a].size()+s[b].size()-total.size();
        printf("%.1f",double(nc)/total.size()*100);
        printf("%%\n"); 
    }
    return 0;
}

AC代码

#include
#include
#include 
using namespace std;
set s[55];
int main()
{
    int n,m,t,num,a,b;
    scanf("%d",&n);
    for(int i=0;itotal;
        int totalnum = s[a].size(), samenum = 0;
        for (set::iterator it = s[b].begin(); it != s[b].end(); it++)
        {
            if (s[a].find(*it) != s[a].end())
                samenum++;
            else
                totalnum++;
        }
        printf("%.1lf%%\n", samenum*100.0/totalnum);
    }
    return 0;
}

你可能感兴趣的:(PAT A1063)