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