• 长城守卫 Beijing guards CERC 2004 LA3177 解题总结


    在最小值,最大值的问题 或者没有办法确定答案时候,  可以使用二分答案法.

    #include <cstdio>
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    int main(){
    	fstream f("E:\text.txt");
    
    	int n;
    	int gift[100];
    	bool used[100];
    	memset(used, 0, sizeof(used));
    	int ans = 0;
    	f >> n;
    	for (int i = 0; i < n; i++){
    		f >> gift[i];
    	}
    	ans = gift[0];
    	for (int i = 0; i < gift[0]; i++) used[i] = true;
    	
    	for (int i = 1; i < n; i++){
    
    		int g = gift[i];
    		int j = 0;
    		while (1){
    			if (used[j]) used[j] = false;
    			else {
    				g--; used[j] = true;
    				if (g == 0) break;
    			}
    			if (j+1>ans) ans = j+1;
    			j++;
    		}
    	}
    	int last=0;
    	for (int i = gift[0]; i < ans; i++){
    		if (!used[i]) last++;
    	}
    	for (int i = 0; i < gift[0]; i++){
    		if (used[i]){
    			if (last>0)
    				last--;
    			else
    			 ans++;
    		}
    	}
    	cout << ans;
    }


  • 相关阅读:
    设计模式--单例模式(Singleton)
    C# 和.Net 特性
    Fiddler 教程
    史铁生遗作:昼信基督夜信佛
    如何实现早日退休理想
    Linux 常用
    Golang 读书
    Python 读书
    RbMQ 简介
    UML 简介
  • 原文地址:https://www.cnblogs.com/Pomodori/p/4316626.html
Copyright © 2020-2023  润新知