XDOJ 1076 - 有没有女孩子愿意跟我一起回家种田~~

Description

  从前有个小男孩,他有很多的优点,并且天资聪慧,拥有各种能力。

他有一个梦想,就是找一个女孩陪他回家种田。

可是他不希望那个那个女孩子的性格和自己过于相似。

有一天,他终于说服了一直暗恋的女孩一起参加ACM相亲栏目。

于是他来到了西电ACM相亲节目组,请求里面的同学帮忙看看这个女孩的性格特征是否符合自己的要求。 

 

Input

每组数据占一行,输入 n,m (n<100000,m<100000); n 代表小男孩拥有的性格种类。m 代表女孩的性格种类。
接下来有 n+m 个数据。分别是 n 种男孩拥有的性格 和 m 种女孩拥有的性格。
(性格的值w:    0<w<1000,000,000)
n=0,m=0;表示输入结束

Output

如果女孩拥有的小男孩性格的数量超过了男孩性格的一半,则输出“美丽的女孩,你不适合种田,你适合做ACM!”

如果女孩子的性格全部和小男孩不同,则输出“有没有女孩子愿意跟我一起回家种田~~“

否则输出  “就是你了,陪我回家种田去吧!“ 并且换行后,
第一行输出他们共同的性格的数量N,接下来N行每行输出一个共同性格,按照从小到大的序列。
(本次比赛输出中包含中文,和中文连在一起的标点符号主意用中文的标点符号 如 ! ~~)。

Sample Input

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

Sample Output

就是你了,陪我回家种田去吧!
1
1
美丽的女孩,你不适合种田,你适合做ACM!
有没有女孩子愿意跟我一起回家种田~~

Hint

   性格的编号不分男女,比如”单纯“的性格编号为  1,  男孩有1,女孩有1,则说明他们都有单纯的性格.

每个人对于同样的性格只能拥有一次。

解题思路:

题目比较简单,我的做法是先分别对男生的性格排序O(nlgn),女生排序O(mlgm),然后再进行比较O(m+n)

 

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

const int D = 100000;
vector<int> boy;
vector<int> girl;
int commonP[D];
bool lessComp(const int& r1,const int& r2)
{
    return r1<r2;
}
int main()
{
    int n,m;
    while(cin>>n>>m)
    {
        if((n||m)==0)
            break;
        boy.clear();
        girl.clear();
        for(int i=0;i<n;++i)
        {
            int t;
            cin>>t;
            boy.push_back(t);
        }
        for(int i=0;i<m;++i)
        {
            int t;
            cin>>t;
            girl.push_back(t);
        }
        sort(boy.begin(),boy.end(),lessComp);
        sort(girl.begin(),girl.end(),lessComp);
        int i=0;
        int j=0;
        int half = n/2+n%2;
        int common = 0;
        int k = 0;
        while(i<n&&j<m)
        {
            if(boy.at(i)==girl.at(j))
            {
                ++common;
                if(common>half)
                {
                    cout<<"美丽的女孩,你不适合种田,你适合做ACM!"<<endl;
                    common = -1;
                    break;
                }
                commonP[k++] = boy.at(i);
                ++i;
                ++j;
            }
            else if(boy.at(i)<girl.at(j))
                    ++i;
            else
                ++j;
        }
        if(common==-1)
            continue;
        if(common==0)
        {
            cout<<"有没有女孩子愿意跟我一起回家种田~~"<<endl;
            continue;
        }
        cout<<"就是你了,陪我回家种田去吧!"<<endl;
        cout<<common<<endl;
        for(i=0;i<k;++i)
            cout<<commonP[i]<<endl;
    }
    return 0;
}

 

最后欢迎大家访问我的个人网站: 1024s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值