Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 1301 | Accepted: 569 |
Description
Input
A single data set has 4 components:
- Start line - A single line:
START X
where (1 <= X <= 20) is the number of contestants demanding shirts. - Tolerance line - A single line containing X space-separated pairs of letters indicating the size tolerances of each contestant. Valid size letters are S - small, M - medium, L - large, X - extra large, T - extra extra large. Each letter pair will indicate the range of sizes that will satisfy a particular contestant. The pair will begin with the smallest size the contestant will accept and end with the largest. For example:
MX
would indicate a contestant that would accept a medium, large, or extra large T-shirt. If a contestant is very picky, both letters in the pair may be the same. - Inventory line - A single line:
S M L X T
indicating the number of each size shirt in Boudreaux and Thibodeaux's inventory. These values will be between 0 and 20 inclusive. - End line - A single line:
END
After the last data set, there will be a single line:
ENDOFINPUT
Output
T-shirts rock!
Otherwise, output:
I'd rather not wear a shirt anyway...
Sample Input
START 1 ST 0 0 1 0 0 END START 2 SS TT 0 0 1 0 0 END START 4 SM ML LX XT 0 1 1 1 0 END ENDOFINPUT
Sample Output
T-shirts rock! I'd rather not wear a shirt anyway... I'd rather not wear a shirt anyway...
Source
#include<stdio.h>
#include<string.h>
int mat[25][10];
int c[10];
int link[10][25],n;
bool usedif[25];
bool can(int t)
{
for(int i=1;i<=5;i++)
if(usedif[i]==false&&mat[t][i]==1)
{
usedif[i]=true;
if(link[i][0]<c[i])
{
link[i][++link[i][0]]=t;
return true;
}
else
for(int j=1;j<=link[i][0];j++)
if(can(link[i][j]))
{
link[i][j]=t;
return true;
}
}
return false;
}
int MaxMatch()
{
int num=0;
for(int i=1;i<=5;i++) link[i][0]=0;
for(int i=1;i<=n;i++)
{
memset(usedif,false,sizeof(usedif));
if(can(i)) num++;
}
return num;
}
int main()
{
char s[30];
while(scanf("%s",s)!=EOF)
{
if(strcmp(s,"ENDOFINPUT")==0) break;
scanf("%d",&n);
memset(mat,0,sizeof(mat));
char str[10];
for(int i=1;i<=n;i++)
{
scanf("%s",str);
int fir,sec;
for(int j=0;j<2;j++)
{
int t;
if(str[j]=='S') t=1;
else if(str[j]=='M') t=2;
else if(str[j]=='L') t=3;
else if(str[j]=='X') t=4;
else t=5;
if(j==0) fir=t;
else sec=t;
}
for(int j=fir;j<=sec;j++)
mat[i][j]=1;
}
for(int i=1;i<=5;i++) scanf("%d",&c[i]);
scanf("%s",str);
if(MaxMatch()==n) printf("T-shirts rock!/n");
else printf("I'd rather not wear a shirt anyway.../n");
}
return 0;
}