L1-030 一帮一
题目 L1-030 一帮一
思路分析
代码实现
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
using ll = long long;
using ull= unsigned long long;
using PII = pair<int,int>;
using Pll = pair<ll,ll>;
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
const int inf = 0x3f3f3f3f;
const int N = 55;
using PIS = pair<int,string>;
PIS student[N];
bool is_match[N];
//const int N=55;
//vector<string> male;
//vector<string> female;
signed main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n;cin>>n;
for(int i=0;i<n;i++){
int sex;string name;
cin>>sex>>name;
student[i].first=sex,student[i].second=name;
}
// for(int i=0;i<n;i++) cout<<student[i].first<<" "<<student[i].second<<endl;
// 貌似不能用对撞指针 因为名次高低与性别无关 很可能出现右边全是同一性别 j指针不好控制移动(单调性不满足)
// for(int i=0,j=n-1;i<n;i++){
// while(j>=0 && student[i].first != student[i].first) j--;
// if(student[i].first != student[i].first){
//
// }
// }
//考虑换个思路 因为一定是男女匹配 且保证男女比例为1:1 那么就一定每人都能匹配到
//干脆 男女分别排序 然后一一成对输出
//也不对 这样的话控制不了名次从高到底排列
// int n;cin>>n;
// while(n--){
// int sex;string name;cin>>sex>>name;
// if(sex==0) female.push_back(name);
// else male.push_back(name);
// }
//
// reverse(male.begin(),male.end());
//
// for(int i=0;i<male.size()-1;i++){
// cout<<female[i]<<" "<<male[i]<<endl;
// }
//暴力吧 还是双指针思路 用一个标记记录某人是否已经组过队 对每个人遍历去找
for(int i=0;i<n;i++){
for(int j=n-1;j>=0;j--){
if(!is_match[i] && !is_match[j]){
if(student[i].first != student[j].first){
cout<<student[i].second<<" "<<student[j].second<<endl;
is_match[i]=true;is_match[j]=true;
break;
}
}
}
}
return 0;
}
同类题型
视频讲解
⬅️ L1-029 是不是太胖了 🏠 00-天梯赛 ➡️ L1-031 到底是不是太胖了
💬 评论