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;
    
    }

    很好理解,就不打注释了

    可以说水题一道

  • 相关阅读:
    nginx+ftp图片服务器搭建
    第一篇随笔
    字符设备控制技术
    总结字符设备
    字符设备驱动模型
    使用字符设备驱动
    驱动开发前奏
    linux内核链表的移植与使用
    linux内存管理子系统
    内核模块可选信息
  • 原文地址:https://www.cnblogs.com/lyqlyq/p/6803951.html
Copyright © 2011-2022 走看看