tju 4069 kai's problem (hash)

4069.   Kai's problem
Time Limit: 1.0 Seconds    Memory Limit: 65536K
Total Runs: 174    Accepted Runs: 93



Do you remember how Kai constructed the word "eternity" using pieces of ice as components?
Little Sheldon plays with pieces of ice, each piece has exactly one digit between 0 and 9. He wants to construct his favourite number t. He realized that digits 6 and 9 are very similar, so he can rotate piece of ice with 6 to use as 9 (and vice versa). Similary, 2 and 5 work the same. There is no other pair of digits with similar effect. He called this effect "Digital Mimicry".
Sheldon favourite number is t. He wants to have as many instances of t as possible. How many instances he can construct using the given sequence of ice pieces. He can use any piece at most once.

Input

There are multi cases, Each case the first line contains integer t (1≤t≤10000). The second line contains the sequence of digits on the pieces. The length of line is equal to the number of pieces and between 1 and 200, inclusive. It contains digits between 0 and 9.

Output

For each case, Print the required number of instances.

Sample Input

42
23454

Sample Output

2 

题意: 容易懂
题目分析:直接hash求取所有数字匹配的匹配数的最小值
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>

using namespace std;

char t[10], s[207];
int num[10],sum[10];

int main ( )
{
    while ( ~scanf ( "%s" , t ) )
    {
        memset ( num , 0 , sizeof ( num ) );
        memset ( sum , 0 , sizeof ( sum ) );
        scanf ( "%s" , s );
        int i = 0;
        while ( t[i] )
            num[t[i]-48]++ , i++;
        i = 0;
        while ( s[i] )
            sum[s[i]-48]++ , i++;
        int ans = 10000;
        if ( num[0] ) ans = min ( (int) (sum[0]/num[0]) , ans );
        if ( num[1] ) ans = min ( (int)(sum[1]/num[1]) , ans );
        if ( num[2]+num[5] ) ans = min ( (int)((sum[2]+sum[5])/(num[2]+num[5])) , ans );
        if ( num[3] ) ans = min ( (int)(sum[3]/num[3]) , ans );
        if ( num[4] ) ans = min ( (int)(sum[4]/num[4]) , ans );
        if ( num[6]+num[9] ) ans = min ( (int)((sum[6]+sum[9])/(num[6]+num[9])) , ans );
        if ( num[7] ) ans = min ( (int)(sum[7]/num[7]) , ans );
        if ( num[8] ) ans = min ( (int)(sum[8]/num[8]) , ans );
        printf ( "%d\n" , ans );
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值