• [洛谷P3550][POI2013]TAK-Taxis


    题目大意:一条路上有三个点,$0$为起始位置,$d$为总部,$m$为家。有$n$辆车,每辆车最多行驶$x_i$,都从$d$出发,可以在任意位置结束,问最少几辆车可以到家。

    题解:贪心,发现当人在$[0,d)$时,车子越多,越浪费,所以尽可能用距离远的车。但这样也有可能导致最后没有车子从$d->m$,所以再最开始留下一辆可以的车。

    注意判断只需要最后一辆车可以带到$m$,就可以结束循环,还有若无解,输出$0$,而非$-1$

    卡点:无解输出了$-1$,应为$0$

    C++ Code:

    #include <algorithm>
    #include <cstdio>
    #include <vector>
    #define maxn 500010
    
    int n, ans;
    long long m, d, x;
    std::vector<long long> s;
    int main() {
    	scanf("%lld%lld%d", &m, &d, &n);
    	for (int i = 0; i < n; ++i) {
    		scanf("%lld", &x);
    		s.push_back(x);
    	}
    	std::sort(s.begin(), s.end());
    	long long a = 0;
    	if (m - d) {
    		int p = std::lower_bound(s.begin(), s.end(), m - d) - s.begin();
    		if (p >= n) {
    			puts("0");
    			return 0;
    		}
    		a = s[p];
    		s.erase(s.begin() + p);
    	}
    	std::reverse(s.begin(), s.end());
    	long long pos = 0, td = d - (a - m + d >> 1);
    	for (long long i : s) {
    		long long t = i - d + pos;
    		if (t <= 0) {
    			puts("0");
    			return 0;
    		}
    		pos += t;
    		++ans;
    		if (pos >= td) break;
    	}
    	printf("%d
    ", ans + (pos < m));
    	return 0;
    }
    

      

  • 相关阅读:
    Java 如何在线打开编辑word文档?
    java运行Linux命令
    docker安装mysql挂载宿主本地目录资源后无法启动的问题
    BigDecimal 实际测试结果
    docker中Ubuntu安装jdk1.8
    smarty模板自定义变量调节器
    smarty模板基础
    phpcms基本语句的用法
    php后台管理(列表页替换)
    phpcms后台管理(首页内容替换)
  • 原文地址:https://www.cnblogs.com/Memory-of-winter/p/10335784.html
Copyright © 2020-2023  润新知