题意:
是你有 k k k 个所给分子数,你通过将这个分子拆分再组合成另一个分子,问你最多能组合几个你想要的分子。
统计个数按照最小的那个就行。
AC代码:
const int N = 1e5 + 10;
int n, m;
string s, t;
int a[1000], b[1000];
int ans, res, cnt, tmp, num;
int main()
{cin >> s;sd(n);cin >> t;int len1 = s.size();int len2 = t.size();ans = inf;rep(i, 0, len1 - 1){if ((s[i] >= 'A' && s[i] <= 'Z' && s[i + 1] >= 'A' && s[i + 1] <= 'Z') || (i == len1 - 1)){a[s[i] - 'A']++;}num = s[i] - 'A';if (s[i] >= 'A' && s[i] <= 'Z' && s[i + 1] >= '0' && s[i + 1] <= '9'){int x = 0;for (i++; s[i] >= '0' && s[i] <= '9'; i++)x = x * 10 + s[i] - '0';a[num] += x;i--;}}rep(i, 0, len2 - 1){if ((t[i] >= 'A' && t[i] <= 'Z' && t[i + 1] >= 'A' && t[i + 1] <= 'Z') || (i == len2 - 1)){b[t[i] - 'A']++;}num = t[i] - 'A';if (t[i] >= 'A' && t[i] <= 'Z' && t[i + 1] >= '0' && t[i + 1] <= '9'){int x = 0;for (i++; t[i] >= '0' && t[i] <= '9'; i++)x = x * 10 + t[i] - '0';b[num] += x;i--;}}rep(i, 0, 30){if (b[i] && !a[i]){puts("0");return 0;}if (a[i] && b[i]){if (ans > a[i] * n / b[i])ans = a[i] * n / b[i];}}pd(ans);return 0;
}