감 ¶
- algorithm 라브러리 무 ..ㅋㅋㅋ
- 가 를 각 못 맸~
- 가 를 각 못 맸~
각 ¶
- 가 많 람 는 부 가 많 리가 는 블부 명 배면 된다.
- 그렇게 배 다가 리가 남 배 는 면 그 배 뿐만 라 다른 떤 방법로 배가 가능다.
- 느 블 보다 많리면 무 배가 가능다.
- 그렇게 배 다가 리가 남 배 는 면 그 배 뿐만 라 다른 떤 방법로 배가 가능다.
- 느 블 보다 많리면 무 배가 가능다.
딩 방법 ¶
- 를 붙고 그 많 로 렬
- 블 를 붙고 그 리가 많 로 렬
- 많 부 리가 많 블 면 블 는 리를 감 고 람게 블 를 부
- 렇게 되면 리가 많 블 먼 는 리가 0 될 는 게된다.
- 다가 블 는 리 가 0 블 만나면 return false.
- 0 만나 고 다 배고 나면 '1' 력고 람게 메겨 블 로 렬 력
- 0 만나게 되면 '0' 력
- 블 를 붙고 그 리가 많 로 렬
- 많 부 리가 많 블 면 블 는 리를 감 고 람게 블 를 부
- 렇게 되면 리가 많 블 먼 는 리가 0 될 는 게된다.
- 다가 블 는 리 가 0 블 만나면 return false.
- 0 만나 고 다 배고 나면 '1' 력고 람게 메겨 블 로 렬 력
- 0 만나게 되면 '0' 력
¶
#include <iostream>
#include <algorithm>
using namespace std;
int input1, input2;
int i, j;
struct Team {
int number;
int memberNum;
int person[101];
};
struct Table {
int number;
int chairNum;
int chair[101];
};
Team team[71];
Table nTable[51];
bool compareTeam(const Team &a, const Team &b)
{
return a.memberNum>b.memberNum;
}
bool compareTeam2(const Team &a, const Team &b)
{
return a.number<b.number;
}
bool compareTable(const Table &a, const Table &b)
{
return a.chairNum>b.chairNum;
}
void printTeam()
{
cout << "1" <<endl;
for(i=1; i<input1+1; i++)
{
for(j=1; j<team[i].memberNum+1; j++)
cout << team[i].person[j] << " ";
cout <<endl;
}
}
bool matchingTable()
{
for(i=1; i<input1+1; i++)
{
for(j=1; j<team[i].memberNum+1; j++)
{
if(team[i].memberNum>input2)
return false;
if(nTable[j].chairNum>0)
{
nTable[j].chairNum--;
team[i].person[j] = nTable[j].number;
}
else
return false;
}
sort(&team[i].person[1], &team[i].person[team[i].memberNum+1]);
}
return true;
}
int main()
{
while(cin >> input1 >> input2)
{
if(input1==0 && input2==0)
break;
for(i=1; i<input1+1; i++)
{
cin >> team[i].memberNum;
team[i].number=i;
}
for(i=1; i<input2+1; i++)
{
cin >> nTable[i].chairNum;
nTable[i].number=i;
}
sort(&team[1], &team[input1+1], compareTeam);
sort(&nTable[1], &nTable[input2+1], compareTable);
if(matchingTable())
{
sort(&team[1], &team[input1+1], compareTeam2);
printTeam();
}
else
cout << "0" <<endl;
}
return 0;
}










