1. 程式人生 > >codeforces Round #440 A Search for Pretty Integers【hash/排序】

codeforces Round #440 A Search for Pretty Integers【hash/排序】

dash hash acad pro section cif close esp small

A. Search for Pretty Integers 【題目鏈接】:http://codeforces.com/contest/872/problem/A time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output

You are given two lists of non-zero digits.

Let‘s call an integer pretty if its (base 10) representation has at least one digit from the first list and at least one digit from the second list. What is the smallest positive pretty integer?

Input

The first line contains two integers n and m (1 ≤ n, m ≤ 9) — the lengths of the first and the second lists, respectively.

The second line contains n distinct digits a1, a2, ..., an (1 ≤ ai ≤ 9) — the elements of the first list.

The third line contains m distinct digits b1, b2, ..., bm (1 ≤ bi ≤ 9) — the elements of the second list.

Output

Print the smallest pretty integer.

Examples input
2 3
4 2
5 7 6
output
25
input
8 8
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
output
1
Note

In the first example 25, 46, 24567 are pretty, as well as many other integers. The smallest among them is 25. 42 and 24 are not pretty because they don‘t have digits from the second list.

In the second example all integers that have at least one digit different from 9 are pretty. It‘s obvious that the smallest among them is 1, because it‘s the smallest positive integer.

【題意】:給定2個數組,求一個最小數,滿足裏面含有2個數組中至少一個數。註意特判倆個數組中含有相等的數的求看!

【分析】:方法一:分別hash一下每個數組的數,出現的標記為1,如果某個數在兩個數組同時標記為1,說明在兩個數組內都出現過,直接輸出該數(如果兩個數組出現同一個數字,縱使不是裏面最小的,也要單獨輸出)。還要把兩個數組內最小的mina和minb用遞歸找出來,再分別比較兩者,最小放前,稍大置後。

方法二:排序。不用標記,直接升序排序。先判斷兩數組是否出現同一個數(二層循環枚舉一下),否則分別將兩數組第一個(最小)數記錄,比較一下大小,小的在前大的在後。

【代碼】:

技術分享
#include <bits/stdc++.h>

using namespace std;
int main()
{
      int n,m,ma=10,mb=10;
      int x,y,a[10],b[10];//或者不用int,用bool
      memset(a,0,sizeof(a));
      memset(b,0,sizeof(b));//hash數組註意清0,否則結果錯誤
      cin>>n>>m;
      for(int i=1;i<=n;i++)
      {
          cin>>x;
          a[x]=1;
          ma=min(x,ma);
      }
      for(int i=1;i<=m;i++)
      {
          cin>>y;
          b[y]=1;
          mb=min(y,mb);
      }
      for (int i=1;i<=9;i++)
      {
        if (a[i] && b[i])
        {
            cout<<i<<endl;
            return 0;//真的好用,不能是break,否則還會順序執行下去,會是不正確的輸出
        }
      }
     cout<<min(ma,mb)<<max(ma,mb)<<endl;

  return 0;
}
hash

技術分享
#include<bits/stdc++.h>

using namespace std;

int main()
{
    int n,m,a[10],b[10];
    while(cin>>n>>m)
    {
        for(int i=1;i<=n;i++)
            cin>>a[i];
        sort(a+1,a+n+1);

        for(int i=1;i<=m;i++)
            cin>>b[i];
        sort(b+1,b+m+1);

        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                if(a[i]==b[j])
                {
                    cout<<a[i]<<endl;
                    return 0;
                }
            }
        }
        int ma=a[1];
        int mb=b[1];
        int minx=min(ma,mb);
        int maxx=max(ma,mb);
        cout<<minx<<maxx<<endl;
    }
}
sort

codeforces Round #440 A Search for Pretty Integers【hash/排序】