HDOJ 2034 人见人爱A-B 参考代码

HDOJ 2033 人见人爱A+B 参考代码,使用STL的set容器。


方法1:algorithm中的set_difference。

#pragma warning (disable:4786)
#include<set>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;

int main()
{   
    while(true)
    {
        int m,n,i,t;
        scanf("%d%d",&m,&n);
        if(m==0 && n==0) break;

        set <int> s1; // #include<set>
        set <int> s2;
        for(i=0;i<m;i++)
        {
            scanf("%d",&t);
            s1.insert (t);
        }
        for(i=0;i<n;i++)
        {
            scanf("%d",&t);
            s2.insert (t);
        }

        set <int> res;

		//set_union,set_intersection,set_difference分别实现集合的并、交、差,#include<algorithm>
        set_difference(s1.begin(),s1.end(),s2.begin(),s2.end(),insert_iterator<set<int> >(res, res.begin()));


        if(res.size()==0 )
        {
            printf("NULL\n");
        }
        else
        {
            for(set <int>::iterator it=res.begin();it!=res.end() ;it++)
            {
                 printf("%d ",*it);  
            }
            printf("\n");
        }        
    }
    return 0;
}  

方法2:algorithm中的find, set的erase

#include<set>
#include<cstdio>
#include <vector> 
#include<iostream>
#include<algorithm>
using namespace std;


int main()
{    
    int m,n,i,t;
    while(1)
    {
        scanf("%d%d",&m,&n);
        if(m==0&&n==0) break;
        set <int> s1;
        set <int> s2;
        for(i=0;i<m;i++)
        {
            scanf("%d",&t);
            s1.insert (t);
        }
        for(i=0;i<n;i++)
        {
            scanf("%d",&t);
            s2.insert (t);
        }
        
        for(set <int>::iterator it2=s2.begin();it2!=s2.end() ;it2++) //用迭代器遍历set的方法
        {            
			set <int>::iterator it1=find(s1.begin(),s1.end(),*it2); //algorithm的find
			if (it1!=s1.end()) //找到则用erase删除
			{
				s1.erase (it1);
			}
        }
        
        
        if(s1.size()==0 )
        {
            printf("NULL\n");
        }
        else
        {            
            for(set <int>::iterator it1=s1.begin();it1!=s1.end() ;it1++)
            {                
                printf("%d ",*it1);  
            }
            printf("\n");
        }
        
    }
    return 0;
}  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值