zoukankan      html  css  js  c++  java
  • (TOJ1388)人见人爱AB

    描述

    A+B人见人爱,A-B也不甘落后,这个A-B求的是两个集合的差,就是做集合的减法运算。(当然,大家都知道集合的定义,就是同一个集合中不会有两个相同的元素,这里还是提醒大家一下)
    呵呵,很简单吧?

    输入

    每组输入数据占1行,每行数据的开始是2个整数n(0<n<=100)和m(0<m<=100),分别表示集合A和集合B的元素个数,然后紧跟着n+m个元素,前面n个元素属于集合A,其余的属于集合B. 每个元素为不超出int范围的整数,元素之间有一个空格隔开. 如果n=0并且m=0表示输入的结束,不做处理。

    输出

    针对每组数据输出一行数据,表示A-B的结果,如果结果为空集合,则输出“NULL”,否则从小到大输出结果,为了简化问题,每个元素后面跟一个空格.

    样例输入

    3 3 1 2 3 1 4 7
    3 7 2 5 8 2 3 4 5 6 7 8 
    0 0
    

    样例输出

    2 3 
    NULL
     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<ctype.h>
     4 #include<math.h>
     5 
     6 int a[10001],b[10001];
     7 
     8 int split(int a[],int low,int high)
     9 {
    10    int part_element=a[low];
    11    for(;;){
    12    while(low<high&&part_element<=a[high])
    13      high--;
    14    if(low>=high) break;
    15    a[low++]=a[high];
    16  
    17    while(low<high&&a[low]<=part_element)
    18      low++;
    19    if(low>=high) break;
    20    a[high--]=a[low];
    21    }
    22    a[high]=part_element;
    23    return high;
    24 }
    25 void quicksort(int a[],int low,int high)
    26 {
    27    int middle;
    28    if(low>=high)return;
    29    middle=split(a,low,high);
    30    quicksort(a,low,middle-1);
    31    quicksort(a,middle+1,high);
    32  }
    33 int deal(int c[], int n, int d[], int m)
    34 {
    35     int i,j,k,flag;
    36     i=j=flag=0;
    37     while(i<n){
    38         if(c[i]<d[j]){
    39             printf("%d ",c[i]);
    40             while(c[i]==c[i+1] && i+1<n) i++;
    41             i++; flag=1;
    42         }
    43         else if(c[i]==d[j]){
    44             while(c[i]==c[i+1] && i+1<n) i++;
    45             while(d[j]==d[j+1] && j+1<n) j++;
    46             i++; j++;
    47         }
    48         else{
    49             while(d[j]==d[j+1] && j+1<n) j++;
    50             j++;
    51         }
    52     }
    53     if(flag==0) printf("NULL");    
    54     printf("\n");
    55 }
    56 
    57 void solve()
    58 {
    59     int i,j,n,m;
    60     while(scanf("%d %d",&n,&m) && (m||n)){
    61     for(i=0; i<n; i++){
    62         scanf("%d",&a[i]);
    63     }
    64     for(i=0; i<m; i++){
    65         scanf("%d",&b[i]);
    66     }
    67     quicksort(a,0,n-1);
    68     quicksort(b,0,m-1);
    69     deal(a,n,b,m);
    70     }
    71 }
    72 
    73 int main()
    74 {
    75     solve();
    76     return 0;
    77 }
     
  • 相关阅读:
    全体自然数的和是负十二分之一?
    隐马尔可夫模型(二)维特比算法
    隐马尔可夫模型
    freemarker实现单元格动态合并-行合并
    工具类_JavaPOI_Office文件内容读取
    SpringBoot-自动装配对象及源码ImportSelector分析
    SpringBoot-文件在线预览解决方案-基于OpenOffice及jacob
    Elasticsearch6.4.0-windows环境部署安装
    单列模式与多线程
    基于SpringMVC的文件(增删改查)上传、下载、更新、删除
  • 原文地址:https://www.cnblogs.com/xueda120/p/3094656.html
Copyright © 2011-2022 走看看