标签:highlight bre 检查 i++ const div 一个 space 题目
题目bala bala一大堆废话,总的意思就是,有n个公主,n个王子,让你去给每一位公主匹配王子。其中每位公主都有心目中的王子,在这个基础上进行匹配。
如果这样就可以让n个公主找到自己的王子,那么就输出“OPTIMAL”,否则输出任意一个 没有找到王子的公主 以及其能够匹配的王子。
ps:一位公主只能匹配一位王子。
#include <iostream>
#include <cstdio>
const int maxn=1e5+10;
using namespace std;
int a[maxn],b[maxn],c[maxn],t,n;
//a 数组是判断公主是否有对象 b数组是判断王子是否有对象 c数组是存放公主意愿
int main(){
cin>>t;
while (t--) {
cin>>n;
//下面对公主意愿进行匹配
for (int i=1; i<=n; i++) {
int x;cin>>x;
for (int j=1; j<=x; j++) cin>>c[j];
for (int j=1; j<=x; j++){
if (!b[c[j]]) {
//如果这个c[j]号的王子没有对象,就让他和a[i]号公主匹配。
b[c[j]]=1;a[i]=1;
break;
}
}
}
//下面检查是否n个公主都成功匹配
for (int i=1; i<=n; i++) {
if (!a[i]) {//如果a[i]公主没有对象,就去匹配没有对象的王子。
cout<<"IMPROVE"<<endl;
for (int j=1; j<=n; j++) {
if (!b[j]) {//这里匹配王子成功,直接输出即可。
cout<<i<<" "<<j<<endl;
goto here;
}
}
}
}
cout<<"OPTIMAL"<<endl;//n个公主成功找到,输出最佳。
here: for (int i=1; i<=n;i++){a[i]=0;b[i]=0;c[i]=0;}//初始化
}
}
每次初始化的时候,对n进行初始化就可以了,我试了试 每次对1e5的范围初始化是会超时的~~
标签:highlight bre 检查 i++ const div 一个 space 题目
原文地址:https://www.cnblogs.com/yishuda/p/12577349.html