zoukankan      html  css  js  c++  java
  • 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
    ",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
    ",a[i]);
                break;
            }
        }
        if (p == i)
        {
            printf("%d
    ",a[p]);
        }
        for (i=0;i<n-2;i++)
        {
            l++;
            if (b[i] != c[i])
            {
                printf("%d
    ",b[i]);
                break;
            }
        }
        if (l == i)
        {
            printf("%d
    ",b[l]);
        }
        return 0;
    
    }
  • 相关阅读:
    结对项目黄金点游戏(邓乐&曾亮)
    软件工程个人项目:一个能自动生成小学四则运算的程序
    IE7下面zindex失效的问题
    参加一战到底有感
    Javascript中的prototype
    浏览器的页面渲染
    使用document.domain实现ajax跨子域
    PHP模拟http请求
    六天带你了解活动营销之第一天营销活动形式多样化
    jQuery源码学习第一天jQuery框架学习
  • 原文地址:https://www.cnblogs.com/-Ackerman/p/11091345.html
Copyright © 2011-2022 走看看