Codeforces Round 52.C+求特殊数组

题目链接:http://codeforces.com/contest/1065/problem/C
题目大意:

5个方柱,高度分别为3,1,2,2,4。要把他们切的一样平,且每次切的方块数量不超过5,如图切2刀y=2, y=1。


思路:只要把方块高度排个序,再求一个数组s[],s[i]表示y=i到y=i+1这层有多少个方块。
如果对于每个i计算都遍历一遍高度时间复杂度为O(n^2)。
这里用了一种O(n)的方法

数组求法:

int n, k;
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        s[a[i]-1]++;
    }
    sort(a+1, a+n+1);

    for(int i=a[n]-1;i>=0;i--)
    {
        s[i]+=s[i+1];
    }

这样我们只要再模拟一遍就行了。

AC代码

#include<bits/stdc++.h>
using namespace std;

int a[200005];
int s[200005];

int main()
{
    int n, k;
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        s[a[i]-1]++;
    }
    sort(a+1, a+n+1);

    for(int i=a[n]-1;i>=0;i--)
    {
        s[i]+=s[i+1];
    }

    int sum=0, now=0;
    for(int i=a[n]; i>=1; i--)
    {
        if(now+s[i]>k)
            sum++, now=s[i];
        else
            now+=s[i];

        if(i==a[1])//最小高度不用再切了
        {
            if(now!=0)//处理剩余方块,加now!=0判断防止全部方块一样高
            sum++;
            break;
        }
    }

    cout<<sum<<endl;

    return 0;
}
全部评论

相关推荐

哈哈哈,你是老六:百度去年裁员分评不好,赶紧弄点红包
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
6285次浏览 59人参与
# 你的实习产出是真实的还是包装的? #
1256次浏览 30人参与
# MiniMax求职进展汇总 #
23184次浏览 300人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7066次浏览 37人参与
# 简历第一个项目做什么 #
31317次浏览 315人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
186517次浏览 1115人参与
# 米连集团26产品管培生项目 #
4660次浏览 206人参与
# 研究所笔面经互助 #
118783次浏览 577人参与
# 面试紧张时你会有什么表现? #
30416次浏览 188人参与
# 简历中的项目经历要怎么写? #
309555次浏览 4162人参与
# 职能管理面试记录 #
10722次浏览 59人参与
# AI时代,哪些岗位最容易被淘汰 #
62679次浏览 745人参与
# 网易游戏笔试 #
6371次浏览 83人参与
# 把自己当AI,现在最消耗你token的问题是什么? #
6982次浏览 154人参与
# 腾讯音乐求职进展汇总 #
160429次浏览 1106人参与
# 从哪些方向判断这个offer值不值得去? #
56712次浏览 357人参与
# 正在春招的你,也参与了去年秋招吗? #
362721次浏览 2631人参与
# 你怎么看待AI面试 #
179403次浏览 1181人参与
# 小红书求职进展汇总 #
226887次浏览 1356人参与
# 你的房租占工资的比例是多少? #
92144次浏览 896人参与
# 校招笔试 #
467547次浏览 2954人参与
# 经纬恒润求职进展汇总 #
155712次浏览 1085人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务