¶
- 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; }