zoukankan      html  css  js  c++  java
  • hihocoder [Offer收割]编程练习赛12 [1494] ---- 一面砖墙

    原题链接

    一面砖墙

    算法分析

    设墙的宽度为 range,则需要统计横坐标为 1,2,3,4,...,range-1 处的墙缝数,取最大的墙缝数(记为maxCrevices),从该处划一道竖线,竖线穿过的砖块数据最少,为N-maxCrevices;当然,输数据中不可能所有的坐标处都有裂缝,所以,我们只需考虑有裂缝的坐标处就行了。这里需要用到map<int,int>数据结构,key 为坐标,value 为该坐标处的裂缝数。统计出最大的裂缝数就能解决问题了。

    C++算法实现:

    #include<iostream>
    #include<map>
    using namespace std;
    
    
    
    int main(int argc, char* argv[])
    {
    	int maxCrevices = 0;
    	map<int, int> crevices;//裂缝数统计
    	int N, num, len, width;
    	cin >> N;
    	for (int i = 0; i < N; i++)
    	{
    		cin >> num;
    		len = 0;
    		for (int j = 1; j < num; j++) {
    			cin >> width;
    			len += width;//每块砖头的右边界算作缝隙位置
    			auto ret = crevices.insert({ len,1 });
    			if (!ret.second) {// 说明之前存在该项,插入不成功,直接在原值上加1进行修改
    				++ret.first->second;
    			}
    			if (ret.first->second > maxCrevices) {//最终将得到最大的裂缝数
    				maxCrevices = ret.first->second;
    			}
    		}
    		cin >> width;//每一层的最后一块砖头无需考虑,因为这块砖头的右边界不算缝隙
    	}
    	cout << N - maxCrevices;
    	return 0;
    }
  • 相关阅读:
    梯度下降的矩阵分解公式推导
    再谈矩阵分解在推荐系统中的应用
    浅谈矩阵分解在推荐系统中的应用
    tomcat局域网内发布html
    通过JavaScript动态生成html控件
    html 复选框checkbox
    HTML <frameset>不同frame之间传值
    OpenLayers 案例一
    ubuntu java开发环境jdk安装
    如何成为Python高手
  • 原文地址:https://www.cnblogs.com/dongling/p/6659492.html
Copyright © 2011-2022 走看看