问?70分。
  • 板块灌水区
  • 楼主mayinghui
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/23 08:30
  • 上次更新2024/10/23 12:29:57
查看原帖
问?70分。
1493535
mayinghui楼主2024/10/23 08:30

口袋(pocket)

题目背景

口袋(pocket)

题目描述

克拉拉同学平时就喜欢一些奇奇怪怪的东西,她有一个神奇的口袋,她能从口袋里拿出各种神奇的东西。

某一天她发现口袋里出现了一些像数字形状的物品, 我们用 0 到 9 这十种数字来表示不同的物品。

克拉拉有一个非常喜欢的数字 x, 现在她想用口袋里的给出的这些数字形状的物品来组成尽可能多的 x,每个物品只能用一次。

组装过程中克拉拉发现这些像数字形状的物品中,“2” 和 “5”倒过来特别像,“6” 和 “9” 倒过来也特别像,所以她可以用 2 和 5 互相代替,也能用 6 和 9互相代替(其他的不能代替)。

举个例子,克拉拉喜欢数字 42,现在口袋里能拿出来顺序为 “23454” 这五种物品,因此她可以用第一个物品 “2” 和第三个物品 “4” 组成 42(可以组成 24,但不是需要的),还能用第四个物品 “5” 和第五个物品 “4" 组成 42(其中 5 倒过来可以当作 2 )。

现在想要知道这些物品最多能组成几个克拉拉最喜欢的数字。

请你编程帮克拉拉解决这个问题,并输出能用物品组成 x。

输入格式

第一行为一个正整数 x,表示克拉拉最喜欢的数字。

第二行为一个字符串,字符串每一位为 ‘0’ 到 ‘9’ 的某个字符,字符串长度为物品的个数(数字之间没有其他符号)。

输出格式

一行,一个整数,表示能用物品拼成最多的 x 的个数(拼成 x 的次数)。

样例 #1

样例输入 #1

42
23454

样例输出 #1

2

样例 #2

样例输入 #2

169
21891919

样例输出 #2

1

样例 #3

样例输入 #3

801
12345678111

样例输出 #3

0

提示

样例1说明

(2, 4)和 (5, 4)拼成 42,其中 5 可以倒过来当作 2。可以证明不能再多拼成一个 42 了。

样例2说明

2-“1”-8-“9”-1-“9”-1-9,可以用(1,9,9)拼成 169,第一个 9 可以倒过来当 6 使用。

因为每个数字只能用一次,因此最多只能拼成一个 169。

数据规模

对于 30% 的数据,1 ≤ x ≤ 100,字符串长度不超过 20。

其中 10% 的数据保证 x < 10, 另外 10% 的数据保证 x 中不出现 2、5、6、9。

对于 60% 的数据,1 ≤ x ≤ 1000, 字符串长度不超过 100;

对于 100% 的数据,1 ≤ x ≤ 100000,字符串长度不超过 200000 。

#include<bits/stdc++.h>

using namespace std;

string a,b; int cnt=INT_MAX;

int a1[11],a2[11];

int main(){

cin>>a>>b;

int lena=a.size(),lenb=b.size();

for(int i=0;i<lena;i++){
	a1[a[i]-'0']++;
}
for(int i=0;i<lenb;i++){
	if(b[i]=='2'||b[i]=='5'){
		a2[2]++;
		a2[5]++; 
	}
	else if(b[i]=='6'||b[i]=='9'){
		a2[6]++;
		a2[9]++; 
	}else{
		a2[b[i]-'0']++;
	}
}
for(int i=0;i<10;i++){
	if(a1[i]!=0){
		cnt=min(cnt,a2[i]/a1[i]);
	}
}
cout<<cnt;
return 0;

}

2024/10/23 08:30
加载中...