专栏文章

1

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mir0kgsv
此快照首次捕获于
2025/12/04 13:47
3 个月前
此快照最后确认于
2025/12/04 13:47
3 个月前
查看原文
CPP

#include <iostream>
#include <unordered_map>
#include <string>

using namespace std;

int main() {
    string A, B;
    cin >> A >> B;
    
    unordered_map<char, int> freqA, freqB;
    
    // 统计A中每个字符的频率
    for (char ch : A) {
        freqA[ch]++;
    }
    
    // 统计B中每个字符的频率
    for (char ch : B) {
        freqB[ch]++;
    }
    
    // 检查每个字符在B中的频率是否为A中的整数倍
    int lengthA = A.length();
    int lengthB = B.length();
    
    bool isMultiple = true;
    int k = -1;
    
    for (auto &pair : freqA) {
        char ch = pair.first;
        int countA = pair.second;
        
        if (freqB.find(ch) == freqB.end()) {
            isMultiple = false;
            break;
        }
        
        int countB = freqB[ch];
        
        if (countB % countA != 0) {
            isMultiple = false;
            break;
        }
        
        // 计算倍数k(这里只计算一个字符的倍数关系,最后需要验证长度)
        int tempK = countB / countA;
        
        // 如果是第一次计算倍数,则记录k
        if (k == -1) {
            k = tempK;
        } else if (k != tempK) {
            // 如果之前已经计算过k,但当前字符的倍数不一致,则不是整数倍
            isMultiple = false;
            break;
        }
    }
    
    // 验证长度关系
    if (isMultiple && lengthB == k * lengthA) {
        cout << k << endl;
    } else {
        cout << -1 << endl;
    }
    
    return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...