二分疫苗小孩

Posted 行码棋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分疫苗小孩相关的知识,希望对你有一定的参考价值。

题目链接:

https://ac.nowcoder.com/acm/contest/23480/A

打疫苗可以提升手速,但是打疫苗有限制如下:求最大提升程度


因为只有第一针和第二针会产生效果,所以枚举第一针,先算出最佳的第一针和第三针的位置,然后找离第一针和第三针最近的位置即可。

找最近的位置需要二分去找,找到取 二分结果前后的位置取最优即可。


#include<bits/stdc++.h>
using namespace std;
using ll = long long;

int main()

	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	
	int n;
	cin >> n;
	
	string s;
	cin >> s;

	ll k, w, q;
	cin >> k >> w >> q;
	
	vector<int> p;
	for(int i = 0; i < s.size(); i++)
		if(s[i] == '0') p.emplace_back(i);
	
	ll res = 0;
	for(int i = 1; i < p.size(); i++)
	
		int x = p[i] - k, y = p[i] + k;
		int p1 = lower_bound(p.begin(), p.end(), x) - p.begin();
		int p2 = lower_bound(p.begin(), p.end(), y) - p.begin();
		
		int mn1 = min(abs(p[p1] - x), abs(p[p1 - 1 == -1 ? 0 : p1 - 1] - x));
		int mn2 = min(abs(p[p2 == p.size() ? p2 - 1 : p2] - y), abs(p[p2 - 1] - y));
		
		res = max(res, max(0ll, w - mn1 * q) + max(0ll, w - mn2 * q));
	
	cout << res << "\\n";
	return 0;
 

以上是关于二分疫苗小孩的主要内容,如果未能解决你的问题,请参考以下文章

2022牛客寒假算法基础集训营 5 全部题解

宝宝打疫苗

Petya勒索病毒疫苗出现_分分钟让电脑对病毒免疫

中国一针疫苗接种率

全球新冠疫苗接种,环境监控技术保障疫苗运输环境

儿童二类疫苗是否有必要接种