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;
    }
  • 相关阅读:
    Linux:mv命令
    Linux:cp -rp
    Linux:sed命令
    Linux:cut命令...未完待续
    Linux:xargs命令
    python动态获取对象的属性和方法 (转载)
    python 继承中的super
    HTTP认证机制(翻译)
    技术名词解释
    设计模式之代理模式
  • 原文地址:https://www.cnblogs.com/dongling/p/6659492.html
Copyright © 2011-2022 走看看