zoukankan      html  css  js  c++  java
  • BestCoder12 1001.So easy(hdu 5058) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5058

    (格式有点问题,为了方便阅读~~~整个复制下来吧)

     

    题目意思:给出两个长度都为 n 的集合你,问这两个集合是否相等。

         其实思路非常容易想到,就是去重后判断嘛~~~我用到了set 来做。不过有个小细节!!!

         

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <cstring>
     5 #include <set>
     6 using namespace std;
     7 
     8 set<int> a, b;
     9 set<int>::iterator pa, pb;
    10 
    11 int main()
    12 {
    13     #ifndef ONLINE_JUDGE
    14         freopen("in.txt", "r", stdin);
    15     #endif
    16 
    17     int n, in;
    18     while (scanf("%d", &n) != EOF)
    19     {
    20         a.clear();
    21         b.clear();
    22         for (int i = 0; i < n; i++)
    23         {
    24             scanf("%d", &in);
    25             a.insert(in);
    26         }
    27         for (int i = 0; i < n; i++)
    28         {
    29             scanf("%d", &in);
    30             b.insert(in);
    31         }
    32         
    33         bool flag = true;
    34         pb = b.begin();
    35         for (pa = a.begin(); pa != a.end() && pb != b.end(); pa++, pb++)
    36         {
    37             if (*pa != *pb)
    38             {
    39                 flag = false;
    40                 break;
    41             }
    42         }
    43         printf("%s
    ", flag && pa == a.end() && pb == b.end() ? "YES" : "NO");
    44     }
    45     return 0;
    46 }

        

        特别要注意,最后不能单纯只用 flag 来判断输入和输出!!!还需要结合 pa 和 pb 的位置来判断,即都要直到集合结尾,代表元素个数是一样的。因为有可能两个集合去重之后大小不等,而for 循环中是没有考虑到这点的!!只是单纯地以比较短的那个集合来作为基准,如果遇到 {1, 3, 5} , {1, 3, 3},它会提前跳出来并且判断结果是 YES,明显是错的嘛~~~ 

        粗心呀~~~

       另外一种解法,unique 妙用,第一次使用,留个纪念吧~~~~ 

       (unique 用之前需要先排序,而且它不是真正的删除,网上说是挪到数组后面而已)

        

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <cstring>
     5 #include <algorithm>
     6 
     7 using namespace std;
     8 
     9 const int maxn = 100 + 5;
    10 int a[maxn], b[maxn];
    11 
    12 int main()
    13 {
    14     #ifndef ONLINE_JUDGE
    15         freopen("in.txt", "r", stdin);
    16     #endif
    17 
    18     int n;
    19     while (scanf("%d", &n) != EOF)
    20     {
    21         for (int i = 0; i < n; i++)
    22             scanf("%d", &a[i]);
    23         for (int i = 0; i < n; i++)
    24             scanf("%d", &b[i]);
    25         sort(a, a+n);
    26         sort(b, b+n);
    27         int la = unique(a, a+n) - a;
    28         int lb = unique(b, b+n) - b;
    29 
    30         if (la != lb)
    31             printf("NO
    ");
    32         else
    33         {
    34             bool flag = true;
    35             for (int i = 0; i < la; i++)
    36             {
    37                 if (a[i] != b[i])
    38                 {
    39                     flag = false;
    40                     break;
    41                 }
    42             }
    43             printf("%s
    ", flag ? "YES" : "NO");
    44         }
    45     }
    46     return 0;
    47 }
  • 相关阅读:
    Java中的多线程
    Service组件
    Notification和Notification Manager的使用
    Java网络编程
    Intent组件
    Android 多任务多线程断点下载
    hdu 2045
    hdu 2492
    poj 2785
    湖南省第六届程序设计大赛D(台球碰撞)
  • 原文地址:https://www.cnblogs.com/windysai/p/4008003.html
Copyright © 2011-2022 走看看