首页 > 其他分享 >题解:P10450 [USACO03MAR] Best Cow Fences G

题解:P10450 [USACO03MAR] Best Cow Fences G

时间:2024-07-24 15:19:25浏览次数:14  
标签:P10450 Cow int 题解 namespace mid long 1e5 NR

题目链接

O(n^3) 做法

直接暴力枚举长度、起点,再全部跑一边求平均数。

附上我丑陋的代码和提交记录,这个代码可以得42分。

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

const int NR = 1e5 + 5;
long long n, l, a[NR], sum, ave;

int main() {
	cin >> n >> l;
	for (int i = 1; i <= n; i++) cin >> a[i];
	for (int i = l; i <= n; i++) //先枚举长度
		for (int j = 1; j <= n - i + 1; j++) { //枚举起点
			sum = 0;
			for (int k = j; k <= j + i - 1; k++)//遍历,求和
				sum += a[k];
			ave = max(ave, sum * 1000 / i);
		}
	cout << ave;
	return 0;
}

O(n^2) 做法

根据上面,我们可以发现求和的那段过程可以用前缀和优化,我们可以先 $ O(n) $ 预处理前缀和,再枚举。

下面是我丑陋的代码和提交记录,我们已经可以拿到70分了。

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

const int NR = 1e5 + 5;
long long n, l, a[NR], s[NR], sum, ave;

int main() {
	cin >> n >> l;
	for (int i = 1; i <= n; i++) cin >> a[i];
	for (int i = 1; i <= n; i++) s[i] = s[i - 1] + a[i];//前缀和预处理 
	for (int i = l; i <= n; i++) //同上,先枚举长度
		for (int j = 1; j <= n - i + 1; j++) { //枚举起点
			sum = s[j + i - 1] - s[j - 1];
			ave = max(ave, sum / i * 1000);
		}
	cout << ave;
	return 0;
}

O(n log W) 做法

我们可以发现这道题平均数越小越容易达到,符合二分的特点,所以我们可以用二分优化。

历尽千辛万苦,我们AC了这道题,再次贴上我丑陋的代码和提交记录

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

const int NR = 1e5 + 5;
long long n, L;
double l = 0, r = 2e3, s[NR], a[NR];//s[i]表示从a[1]加到a[i]的总和与理想的总和的差

bool check(double mid) {
	for (int i = 1; i <= n; i++) s[i] = s[i - 1] + a[i] - mid; 
	double minn = 0;
	for (int i = L; i <= n; i++) {//枚举起点
		minn = min(minn, s[i - L]);//累求最小值 
		if(s[i] - minn >= 0)
			return 1; 
	}
	return 0;
}

int main() {
	cin >> n >> L;
	for (int i = 1; i <= n; i++) cin >> a[i];
	while (r - l > 1e-5) {
		double mid = (l + r) / 2;
		if(check(mid)) l = mid;
		else r = mid;
	}
	cout << int(r * 1000);
	return 0;
}

标签:P10450,Cow,int,题解,namespace,mid,long,1e5,NR
From: https://www.cnblogs.com/0x3f3f3f3f3f3f/p/18320972

相关文章

  • [CEOI2011] Matching 题解
    前言题目链接:洛谷。在上一题之后,模拟赛又放了一道KMP重定义相等的问题,但是寄了,故再记之。题意简述现在给出\(1\simn\)的排列\(p\)和序列\(h_1,h_2,\cdots,h_m\)​​,请你求出哪些\(h\)的子串符合排列\(p\)。串\(a_i\)符合一个排列被定义为其从小到大排序后得......
  • ABC250H 题解
    题面我们先考虑如何让连续的不在房子中的时间尽量短:我们考虑两个有房子的点\(x,y\),如果\(x\rightsquigarrowu\xrightarrow{w}v\rightsquigarrowy\)这条路径上除了\(x,y\)不存在有房子的点,那么我们可以找到这样一条路径,一定不劣:令\(a,b\)分别为最靠近\(u,v\)的有房......
  • CF547D Mike and Fish 题解
    Description给定\(n\)个整点。你要给每个点染成红色或蓝色。要求同一水平线或垂直线上两种颜色的数量最多相差\(1\)。\(n,x_i,y_i\le2\times10^5\)。Solution考虑给每条水平线和垂直线建一个点,对于每个整点就把它对应的两条线连一条边。题目就转化为了给每条边定......
  • ARC117F Gateau 题解
    ARC117FGateau题解题解区好像都没有对dp详细解释,本文将稍细致地说一说dp部分。题目大意给定一个长度为\(2N\)的环,环上每个节点有属性值\(B_i\(i=0,\dots,2N-1)\)和\(2N\)个限制,第\(i\)个限制形如\(\sum\limits_{j=i}^{i+N-1}B_j\geqA_i\),向环上的节点赋值,使得......
  • 【保奖思路】2024年华为杯研究生数学建模D题解题思路分享(点个关注,后续会更新
    您的点赞收藏是我继续更新的最大动力!一定要点击如下的卡片链接,那是获取资料的入口!点击链接加入群聊【2024华为杯研赛资料汇】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=MwNruKbEvR9aZns1l7xXBWmQQKYAEh-F&authKey=igaBN79pz6BhNlDQ6TIZ5YFAbn71aDcYL77uANPquLF%2FTVgeSAhEZ......
  • 题解|2024暑期牛客多校03
    【原文链接】比赛链接:2024牛客暑期多校训练营3A.BridgingtheGap2题目大意nnn个人过河,第i......
  • P10280 [USACO24OPEN] Cowreography G 题解
    Description奶牛们组了一支舞蹈队,FarmerJohn是她们的编舞!舞蹈队最新而最精彩的舞蹈有\(N\)头奶牛(\(2\leN\le10^6\))排成一行。舞蹈中的每次动作都涉及两头奶牛,至多相距\(K\)个位置(\(1\leK<N\)),优雅地跳起并降落在对方的位置上。队伍中有两种奶牛——更赛牛(Guernsey)和荷......
  • 基因改造 题解
    前言题目链接:Hydro&bzoj。题意简述求匹配串\(S\)中和模式串\(T\)匹配的子串。两个串被定义为匹配的,当且仅当一个串任意交换字符后和另一个串相等。例如\(\texttt{12321}\)和\(\texttt{21312}\)匹配,因为前者交换\(\texttt{1}\)和\(\texttt{2}\)后与后者等价。当然......
  • CF521E Cycling City 题解
    Description给定一张\(n\)个点\(m\)条边的无向简单图。问图中能否找到两个点,满足这两个点之间有至少三条完全不相交的简单路径。\(n,m\le2\times10^5\),图不保证连通。Solution容易发现有解地充要条件是存在两个环有边交,考虑在dfs树上做这件事。注意到非树边一定......
  • CF1990F Polygonal Segments 题解
    题目链接:https://codeforces.com/contest/1990/problem/F赛时想到了一个略显抽象的做法,但因为写反了一个判断导致没能过掉。赛后调参卡过,用时\(3.5/8\)秒。为了不丢失这个idea最终还是决定写个题解记录一下。题意简述给定一个数组\(a_{1..n}\),执行以下查询:查询区间\([......