B. A and B and Compilation Errors

Posted -ackerman

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B. A and B and Compilation Errors相关的知识,希望对你有一定的参考价值。

题目链接: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的主要内容,如果未能解决你的问题,请参考以下文章

Educational Codeforces Round 78 (Rated for Div. 2) B. A and B

B. Mahmoud and a Triangle1000 / 数学

B. Omkar and Last Class of Math1300 / 数论

1013 B. And

codeforces 653B B. Bear and Compressing(dfs)

B. Alyona and a tree(树上差分&倍增)