题目链接:http://codeforces.com/problemset/problem/408/B
题目意思:
编制花圈。给你提供一些有颜色的材料,你可以任意的切分这些材料来编制给定的一个花圈,求最多需要多少块材料来编制这个花圈。
思路:
刚看到这个题目的时候,真心没理解透彻这个题目的意思,而且将题目想难了,其实题目意思很简单,就是所给定的花圈由给定的材料来编制,给定的花圈由多个颜色组成,求要编成这样的花圈要多少块材料。存在两个问题要处理,第一是,不能有给定的材料编制成给定的花圈;另一种情况是,给定的某材料数小于花圈的数量,这时候要切分那个颜色的材料,其实取给定材料和花圈上颜色数最小的那个值就行。
代码:
#include <stdio.h>
#include <string.h>
#define MAXN 1010
int main(){
char n[MAXN], m[MAXN];
int chn[30], chm[30];
int i, j, ans;
memset(chn, 0, sizeof(chn));
memset(chm, 0, sizeof(chm));
ans = 0;
scanf("%s%s", n, m);
for(i = 0; i < strlen(m); ++i){
int flag = 0;
for(j = 0; j < strlen(n); ++j)
if(m[i] == n[j]){
flag = 1;
}
if(!flag){
printf("-1");
return 0;
}
}
for(i = 0; i < strlen(n); ++i){
chn[n[i]-'a']++;
}
for(i = 0; i < strlen(m); ++i){
chm[m[i]-'a']++;
}
for(i = 0; i < 30; ++i){
if(chm[i] <= chn[i])
ans += chm[i];
else
ans += chn[i];
}
printf("%d", ans);
return 0;
}