求助各位大佬!!使用map来做,自己测试没问题,但是只过了两个测试点~
查看原帖
求助各位大佬!!使用map来做,自己测试没问题,但是只过了两个测试点~
1156995
HELLOWKH楼主2023/10/23 23:32
#include <bits/stdc++.h>
using namespace std;

int main() 
{
    int n,m,k,mid,em;
    //n为路的长度,m为原本路标数量,k为要添加的路标数量
    cin >> n >> m >> k;

    int haha[m];
    map<int,int> group;

    for(int i=0;i<m;i++)
        cin >> haha[i];
    
    //将路标之间的差值储存到map里面
    for(int i=0;i<m-1;i++)
    {
        em = haha[i+1] - haha[i];
        group[em]++;
    }

    //有多余路标时一直循环
    while (k)
    {
        //获取map的尾部
        auto it = group.end();
        //减1得到map最后一部分(最大的)
        it--;

        //将分开后的左右两部分都添加到map中,重新排序
        mid = it->first/2;
        group[mid]++;
        mid = it->first - mid;
        group[mid]++;

        //操作完毕后将该差值的计数减1
        it->second--;
        //若计数为0则删除map中的这部分
        if(it->second == 0)
            group.erase(it);
            
        //路标减1
        k--;
    }
    
    //获取最大的那部分
    auto it = group.end();
    it--;
    //输出结果
    cout << it->first;
    return 0;
}
2023/10/23 23:32
加载中...