码迷,mamicode.com
首页 > 其他好文 > 详细

B. A and B and Compilation Errors

时间:2019-06-26 17:57:58      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:col   说明   集合   can   结果   mpi   bsp   ati   ret   

题目链接:http://codeforces.com/contest/519/problem/B

 

这道题目有点像求两个集合的差集

 

一开始就是单纯的去想用短的那个集合去和大的集合去比较,算法也没有想着去优化

结果就超时了

超时代码也贴出来把hhhh

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cstdbool>

using namespace std;




int main()
{
    int n;
    scanf("%d",&n);
    int a[n],b[n-1],c[n-2];
    for (int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    for (int i=0;i<n-1;i++)
    {
        scanf("%d",&b[i]);
    }
    for (int i=0;i<n-2;i++)
    {
        scanf("%d",&c[i]);
    }
    for (int i=0;i<n-1;i++)
    {
        for (int j=0;j<n;j++)
        {
            if (b[i] == a[j])
            {
                a[j] = 0;
                break;
            }
        }
    }
    for (int i=0;i<n;i++)
    {
        if (a[i] != 0)
        {
            printf("%d\n",a[i]);
        }
    }
    for (int i=0;i<n-2;i++)
    {
        for (int j=0;j<n-1;j++)
        {
            if (c[i] == b[j])
            {
                b[j] = 0;
                break;
            }
        }
    }
    for (int i=0;i<n-1;i++)
    {
        if (b[i] != 0)
        {
            printf("%d",b[i]);
        }
    }
    return 0;
}

 

非常暴力的解法hh

 

后来想着去优化,就是先对集合元素排序,然后再进行比较。这样就可以减少算法的复杂度,不会出现n*n的复杂度

如果出现一个不匹配我们直接把它数出来就可以。

如果遍历到底也没出现不匹配的,就说明长集合的最后一个是不匹配的!(这算是一个特例吧,我们就进行一个特判)

 

AC代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cstdbool>

using namespace std;




int main()
{
    int n;
    scanf("%d",&n);
    int a[n],b[n-1],c[n-2];
    for (int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    for (int i=0;i<n-1;i++)
    {
        scanf("%d",&b[i]);
    }
    for (int i=0;i<n-2;i++)
    {
        scanf("%d",&c[i]);
    }
    sort(a,a+n);
    sort(b,b+n-1);
    sort(c,c+n-2);
    int p = 0;
    int l = 0;
    int i;
    for (i=0;i<n-1;i++)
    {
        p++;
        if (a[i] != b[i])
        {
            printf("%d\n",a[i]);
            break;
        }
    }
    if (p == i)
    {
        printf("%d\n",a[p]);
    }
    for (i=0;i<n-2;i++)
    {
        l++;
        if (b[i] != c[i])
        {
            printf("%d\n",b[i]);
            break;
        }
    }
    if (l == i)
    {
        printf("%d\n",b[l]);
    }
    return 0;

}

 

B. A and B and Compilation Errors

标签:col   说明   集合   can   结果   mpi   bsp   ati   ret   

原文地址:https://www.cnblogs.com/-Ackerman/p/11091345.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!