代码有瑕疵,python代码只有40但转c后有100
查看原帖
代码有瑕疵,python代码只有40但转c后有100
1275961
meng_yiran楼主2024/6/24 17:52

这是python的```python a=int(input()) lis=[] lis_shu=[] for i in list(map(int,input().split())): if i not in lis: lis.append(i) lis_shu.append(1) else: lis_shu[lis.index(i)]+=1 lis1=[[lis[],lis_shu[]] for _ in range(len(lis))] lis1.sort(key=lambda x:x[0]) lis1.append([float('inf'),float('inf')]) ans=lis1[0][1] ma=-1 shao=float('inf') for i in range(1, len(lis1)): if lis1[i][0]-lis1[i-1][0]==1: ans+=lis1[i][1] ma=max(ma,lis1[i][1]) else: if ma!=1: ans//=ma shao=min(shao,ans) ans=lis1[i][1] ma=-1 print(shao)

这是cpp的,但是最后一个显示wa了,不知道哪个细节错了```cpp
#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
#include <limits>

int main() {
    int a;
    std::cin >> a;
    
    std::unordered_map<int, int> count_map;
    std::vector<int> nums(a);
    for (int& num : nums) {
        std::cin >> num;
        count_map[num]++;
    }
    
    std::vector<std::pair<int, int>> lis1;
    for (const auto& kv : count_map) {
        lis1.emplace_back(kv.first, kv.second);
    }
    
    std::sort(lis1.begin(), lis1.end());
    lis1.push_back({std::numeric_limits<int>::max(), std::numeric_limits<int>::max()});
    
    long long ans = lis1[0].second;
    int ma = -1;
    long long shao = std::numeric_limits<long long>::max();
    
    for (size_t i = 1; i < lis1.size(); ++i) {
        if (lis1[i].first - lis1[i-1].first == 1) {
            ans += lis1[i].second;
            ma = std::max(ma, lis1[i].second);
        } else {
            if (ma != 1) {
                ans /= ma;
            }
            shao = std::min(shao, ans);
            ans = lis1[i].second;
            ma = -1;
        }
    }
    
    std::cout << shao << std::endl;
    
    return 0;
}
```劳烦大佬指点(最好是能解决py的超时问题谢谢啦)
2024/6/24 17:52
加载中...