洛谷题目传送门 | AT 原题传送门
思路
这道题考察了桶的思想。
定义两个桶,分别存放给出招牌中的每个字母的数量和配件包中的每个字母的数量
有两个小问题需要注意:
-
当招牌需要这个字母,而配件包里没有,直接输出 −1 并结束程序;
-
需要特判当配件包里的每个字符数量如果是 0,就要跳过本次循环,避免除数为 0。
思路不难,看看代码和注释就能理解吧
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| #include<cmath> #include<string> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int ta[30],tb[30]; int n,m; string a,b; int maxn=-1; int main() { cin>>n>>m; cin>>a>>b; for(int i=0;i<n;i++) { ta[a[i]-'A'+1]++; } for(int i=0;i<m;i++) { tb[b[i]-'A'+1]++; } for(int i=1;i<=26;i++) { if(ta[i]!=0 && tb[i]==0) { cout<<-1<<endl; return 0; } if(ta[i]==0 && tb[i]==0) { continue; } maxn=max(maxn,(int)(ceil(1.0*ta[i]/tb[i]))); } cout<<maxn<<endl; return 0; }
|
求管理大大通过