离散题目3

来源:互联网 发布:淘宝卖家打印机 编辑:程序博客网 时间:2024/06/06 05:07

Think:
查寻 子集问题, 暴力 匹配判断啦~~~~~
没错 就是 这么 没道理~~~~

Problem Description

DaYu在新的学习开始学习新的数学知识,一天DaYu学习集合的时候遇到一个问题,他有两个集合A和B,他想知道A是不是B的子集。
Input

多组输入,每组的第一行有两个数n,m,0 < n,m < 10^5。表示集合A的大小和集合B的大小。第二行输入n个数表示集合A,第三行输入m个数表示集合B,|data_i| < 10^5
Output

如果A是B的子集,输出”true”,否则输出”false”。
Example Input

3 5
1 2 3
1 5 4 3 2
3 5
1 2 3
1 4 5 3 6

Example Output

true
false

#include<bits/stdc++.h>using namespace std;int a[100050];int b[100050];int main() {     int n, m;     while(cin >> n >> m)     {         bool flag = true;         bool Flag;         for (int i = 0;i <= n - 1;i ++)            cin >> a[i];         sort(a, a + n);         for (int i = 0;i <= m - 1;i ++)            cin >> b[i];         sort(b, b + m);         //两个  集合 都由从小到大进行排序         int i, j;         int temp = 0;         for (i = 0;i <= n - 1;i ++)         {             Flag = false;             for (j = temp;j <= m - 1;j ++)  //J从上一次查到的数字开始 继续匹配             {                 if (a[i] == b[j])                 {                     temp = j; //表示查到 的数字                     Flag = true;//表示 a[i] 在 b中 有出现                     break;    //若 a[i]  在 b中 有出现 则标记 后 跳出, 进行 下一个数字的判断。                 }             }             if (Flag == false)  //有数字 尚未出现             flag = false;    // 有数字没出现 所以 不是 子集             if (flag == false)                break;         }         if (flag == true)            cout << "true" << endl;         else            cout << "false" << endl;     }     return 0; }
原创粉丝点击