POJ 3487 - 혼인 시스템 안정
#include <cstdio>
#include <cstring>
#include <cctype>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
const int NN=128;
const int INF=0x3fffffff;
int n,cnt1,cnt2,hash[NN],tmpf[NN],cur[NN],num[NN],tag[NN],w[NN][NN];
char id[NN];
bool single[NN];
vector<int> fav[NN];
int get()
{
int x;
char ch=getchar();
while (!isalpha(ch)) ch=getchar();
if (islower(ch))
{
x=ch-'a';
if (!hash[x])
{
hash[x]=++cnt1;
id[cnt1]=ch;
}
}
else
{
x=ch-'A'+26;
if (!hash[x])
{
hash[x]=++cnt2;
id[cnt2]=ch;
}
}
return hash[x];
}
void init()
{
scanf("%d",&n);
cnt1=0;
cnt2=n;
memset(hash,0,sizeof(hash));
for (int i=1; i<=n*2; i++) // 1~n , n+1~2*n
{
int x=get();
fav[x].clear();
tag[x]=0;
w[x][0]=INF;
single[x]=true; //
}
for (int i=1; i<=n*2; i++)
{
int x=get();
for (int j=1; j<=n; j++)
{
int y=get();
w[x][y]=j;
fav[x].push_back(y);
}
}
}
int main()
{
int cas,x,y;
scanf("%d",&cas);
while (cas--)
{
init();
for (int k=0; k<n;) //k
{
memset(num,0,sizeof(num));
memset(tmpf,0,sizeof(tmpf));
int sum=0;
for (int i=1; i<=n; i++)
{
if (single[i] && tag[i]<fav[i].size())//
{
int x=fav[i][tag[i]++]; // x
num[x]++; // x +1
sum++; // +1
if (w[x][i]<w[x][tmpf[x]]) tmpf[x]=i;// ?
}
}
if (sum==0) break; //
for (int i=n+1; i<=n*2; i++) // i
{
if (num[i]==0) continue; // i
if (single[i]) // , ,
{
single[tmpf[i]]=false;
single[i]=false;
cur[tmpf[i]]=i; //
cur[i]=tmpf[i];
k++; //
}
else if (w[i][tmpf[i]]<w[i][cur[i]])
// BF
{
single[cur[i]]=true; //
single[tmpf[i]]=false; //
cur[tmpf[i]]=i;
cur[i]=tmpf[i];
}
}
}
for (int i=1; i<=n; i++)
{
if (!single[i]) printf("%c %c
",id[i],id[cur[i]]);
}
printf("
");
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.