zoukankan      html  css  js  c++  java
  • 消失的数字(number)

    消失的数字(number)

    Time Limit:1000ms   Memory Limit:128MB

    题目描述

    rsy拥有n个数,这n个数分别是a1,a2,…,an。

    后来出现了一个熊孩子zhw,用橡皮擦去了其中若干个数字,并且打乱了剩下的数字。rsy赶到现场后只剩下了m个数字b1,b2,…,bm,她想知道哪些数字被擦去了。

    现在你需要告诉rsy被擦去的n-m个数是什么。

    输入格式(number.in)

        第一行一个数n,第二行n个数ai,表示一开始的数字。

        第三行一个数m,第四行m个数bi,表示被擦去后的数字。

    输出格式(number.out)

        一行n-m个数,从小到大输出所有被擦去的数字。

    输入样例

    5

    1 3 5 7 8

    3

    3 5 8

    输出样例

    1 7

    数据范围

    对于30%的数据n<=1000,ai与bi都是有序的。

    对于60%的数据n<=100000,ai与bi都是有序的。

    对于80%的数据n<=100000,ai,bi<=n。

    对于100%的数据n<=100000,1<=ai,bi<=10^9。

    60分代码

    对于这个题,我刚拿到时,一看到数据范围就开始想什么奇怪的算法,因为我认为普通算法会超时,(可是当拿到std时我蒙了,竟然就是那样;)

    所以当时就直接奔60分去了;由于不充分理解题意,写了个很2的代码

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #include<string>
    
    using namespace std;
    
    const int N=100001;
    
    int a[N];
    int b[N];
    int fa=0;
    int fb=0;//是正序 --从小到大 
    
    int main()
    {
        freopen("number.in","r",stdin);
        freopen("number.out","w",stdout);
        int n;
        int sh;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        scanf("%d",&sh);
        for(int i=1;i<=sh;i++)scanf("%d",&b[i]);
        if(a[1]>a[2])fa=1;//前面的大 
        if(b[1]>b[2])fb=1;
        if(fa==fb&&fa==0)
        {
            int js=1;
            for(int i=1;i<=n;i++)
                if(a[i]!=b[js])printf("%d ",a[i]);
                else js++;
            return 0;
        }
        if(fa==fb&&fa==1)
        {
            int js=sh;
            for(int i=n;i>=1;i--)
                if(a[i]!=b[js])printf("%d ",a[i]);
                else js--;
            return 0;
        }
        if(fa==0&&fb==1)
        {
            int js=sh;
            for(int i=1;i<=n;i++)
                if(a[i]!=b[js])printf("%d ",a[i]);
                else js--;
            return 0;
        }
        if(fa==1&&fb==0)
        {
            int js=1;
            for(int i=n;i>=1;i--)
                if(a[i]!=b[js])printf("%d ",a[i]);
                else js++;
            return 0;
        }
    }

    ac代码

    #include <cmath>
    #include <cstdio>
    #include <cstdlib>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    int n,m,i,X,a[100005],b[100005];
    int cmp(int i,int j) {return i<j;}
    int main()
    {
        freopen("number.in","r",stdin);
        freopen("number.out","w",stdout);
        scanf("%d",&n);
        for (i=1; i<=n; i++) scanf("%d",&a[i]);
        scanf("%d",&m);
        for (i=1; i<=m; i++) scanf("%d",&b[i]);
        sort(a+1,a+n+1,cmp);
        sort(b+1,b+m+1,cmp); X=1;
        for (i=1; i<=n; i++)
        {
            if (a[i]==b[X]) X++; else printf("%d ",a[i]);
        }
        return 0;
    
    }

    很好理解,就不打注释了

    可以说水题一道

  • 相关阅读:
    EF CodeFirst EntityTypeConfiguration 自关联映射配置
    DDD 领域驱动设计-看我如何应对业务需求变化,领域模型调整?
    DDD 领域驱动设计-看我如何应对业务需求变化,愚蠢的应对?
    【记录】ASP.NET XSS 脚本注入攻击
    【记录】JS 获取图片原始尺寸-防止图片溢出
    让 ASP.NET vNext 在 Mac OS 中飞呀飞。。。
    Building Modern Web Apps-构建现代的 Web 应用程序(一些感想)
    【记录】ASP.NET MVC RegisterBundles
    【记录】JS 生成 URL 二维码
    关于有默认值的字段在用EF做插入操作时的思考(续)
  • 原文地址:https://www.cnblogs.com/lyqlyq/p/6803951.html
Copyright © 2011-2022 走看看