zoukankan      html  css  js  c++  java
  • 植物大战僵尸【二分答案, 加贪心思想】


    由于本题得数据范围大,所以不能去一个去枚举

    `(V@N8L@T}}@}SLRAP~${IB


    用到二分答案,考虑当前得这个植物要它大大于等于mid, 所以就相当于来回跳,

    跳的同时它得下以个植物防御也在增加。所以tempn = temp – 1(if它每满足大与等于mid)。满足就只有temp= 1,它到这里用得一天, 而并每有到下一个植物所以tempn = 0;统计天数,比较。

      1 #include <iostream>
      2 #include <algorithm>
      3 #include <cstring>
      4 #include <vector>
      5 using namespace std;
      6 typedef long long LL;
      7 LL n, m;
      8 vector<LL> a;
      9 bool check(LL mid){
     10 
     11 	LL temp = 0, tempn = 0, sum = 0;
     12 	for(int i = 0; i < n; ++ i){
     13 		if(mid % a[i]) temp = mid / a[i] + 1;
     14 		else temp = mid / a[i];
     15 		temp -= tempn;
     16 		if(temp <= 0){
     17 			if(i != n-1)
     18 			temp = 1;
     19 			else temp = 0;
     20 			tempn = 0;
     21 		}
     22 		else{
     23 			tempn = temp - 1;
     24 		}
     25 		sum += temp + tempn;
     26 		if(sum > m)
     27 			return false;
     28 	}
     29 	return true;
     30 }
     31 
     32 int main(){
     33 
     34 
     35 	cin >> n >> m;
     36 
     37 	for (int i = 0; i < n; ++ i){
     38 		LL p;
     39 		cin >> p;
     40 		a.push_back(p);
     41 	}
     42 	LL l = 0, r = 1e18;
     43 	while(l <= r){
     44 		LL mid = (l + r) >> 1;
     45 		if(check(mid)){
     46 			l = mid + 1;
     47 		}
     48 		else {
     49 			r = mid - 1;
     50 		}
     51 	}
     52 	cout << l - 1 << endl;
     53 	return 0;
     54 }
    追求吾之所爱
  • 相关阅读:
    Linux就该这么学28期——Day03 2.4-2.7
    Linux就该这么学28期——Day02 2.1-2.3
    Linux就该这么学28期——开篇
    层次遍历应用

    二叉树
    Linux 随手记录
    KMP算法详解(转)
    使用MySQL connector/C++链接MySQL数据库
    C++ 代码片段
  • 原文地址:https://www.cnblogs.com/rstz/p/12401757.html
Copyright © 2011-2022 走看看