首页 > 其他分享 >E. Photoshoot for Gorillas

E. Photoshoot for Gorillas

时间:2024-08-24 12:05:26浏览次数:8  
标签:min int ll 网格 leq Gorillas Photoshoot 大猩猩

题意

给定一个整数 \(T\),代表共有\(T\)组测试用例,对于每组测试用例:
给定四个整数 \(n,m,k和w(1 \leq n,m \leq 2 * 10^5, 1 \leq w \leq n * m \leq 2 * 10^5, 1 \leq k \leq min(n, m))\),随后输入 \(w\) 个整数 \(a_i\) 代表大猩猩的高度。
你需要从 \(n * m\) 的网格中,选出所有 \(k * k\) 的子网格,并且累计所有的子网格获取到的观赏价值。一个 \(k * k\) 的子网格获取到的观赏价值定义为:该网格内全部大猩猩的高度之和。
你要做的是将 \(w\) 只大猩猩按某个方式放入 \(n * m\) 的网格中,并且每个格子至多只能放置一只大猩猩,然后获取最大的观赏价值。

题解

\(\because\) 每个各自至多只能放置一只大猩猩
\(\therefore\) 将高度较高的大猩猩优先放置在所有子网格中出现频率最高的格子,可以获取到最大的观赏价值

对于格子 \((i, j)\),在所有的子网格中出现的频率为:$$freq = (min(k, (ll)n - i) + min(0LL, i + 1 - k)) * (min(k, (ll)m - j) + min(0LL, j + 1 - k))$$

那么,总体的代码思路就是对所有各自的频率排序,并对猩猩高度排序,从大到小依次配对即可。

参考代码

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false);
using namespace std;

typedef long long ll;
constexpr int N = 2e5 + 7;
int T = 1, n, m, w;
ll k, ans;
int a1[N];
ll a2[N];

void solve() {
	ans = 0;
	cin >> n >> m >> k >> w;
	for (int i = 0; i < w; ++ i) cin >> a1[i];
	sort(a1, a1 + w, [](int &a, int &b) {
		return a > b;
	});
	for (int i = 0; i < n; ++ i) {
		for (int j = 0; j < m; ++ j) {
			a2[i * m + j] = (min(k, (ll)n - i) + min(0LL, i + 1 - k)) * (min(k, (ll)m - j) + min(0LL, j + 1 - k));
		}
	}
	sort(a2, a2 + n * m, [](ll &a, ll &b) {
		return a > b;
	});
	for (int i = 0; i < w; ++ i) {
		ans += a1[i] * a2[i];
	}
	cout << ans << '\n';
}

int main() {
	IOS
	cin >> T;
	while (T --) {
		solve();
	}
	return 0;
}

标签:min,int,ll,网格,leq,Gorillas,Photoshoot,大猩猩
From: https://www.cnblogs.com/RomanLin/p/18358904

相关文章

  • cf966:E. Photoshoot for Gorillas(一个格子被多少个方格包裹了)
    题目你非常喜欢大猩猩,于是决定为它们组织一次拍摄活动。大猩猩生活在丛林中,丛林被表示为一个有......
  • codeforces 1793D Moscow Gorillas
    https://codeforces.com/contest/1793/problem/D解题思路依次找出MEX=1..n+1的序列数量就能得解。MEX=n+1只有全序列这一种情况。MEX=1时,找出两个序列中1的位置,较小位置左边的元素构成的子序列,较大位置右边的元素构成的子序列,以及两个位置中间的元素构成的子序列都满......
  • CF1793 Codeforces Round 852 (Div. 2) D. Moscow Gorillas
    https://codeforces.com/contest/1793/problem/D对于给定的两个长度为\(n\)的排列\(a_i,b_i\),定义\(MEX(S)\)为集合\(S\)中没有出现的最小的正整数,找出所有满足......
  • Codeforces Round #852 (Div. 2) D - Moscow Gorillas
    https://codeforces.com/contest/1793/problem/D不妨枚举MEX(...)的值x。此时对于序列[l,r],需要满足:两个序列的1到x-1都在这个区间内,并且x都不在这个区间内......
  • D. Moscow Gorillas
    D.MoscowGorillasInwinter,theinhabitantsoftheMoscowZooareverybored,inparticular,itconcernsgorillas.Youdecidedtoentertainthemandbrought......