首页 > 其他分享 >Codeforces Round 924 (Div. 2) D. Lonely Mountain Dungeons(推式子,思维,差分,前缀和)

Codeforces Round 924 (Div. 2) D. Lonely Mountain Dungeons(推式子,思维,差分,前缀和)

时间:2024-10-17 16:47:06浏览次数:3  
标签:acc Mountain Lonely int Dungeons times ans +...+ dp

题目链接

Codeforces Round 924 (Div. 2) D. Lonely Mountain Dungeons

思路

令 f ( n , m ) f(n,m) f(n,m)是将 n n n个同种族的人放到 m m m个队伍中可以获得的贡献。

因为同一个队伍中的人不能互相产生贡献,所以尽可能平均分配是最优的。

令 p = ⌊ n m ⌋ p = \left \lfloor \frac{n}{m} \right \rfloor p=⌊mn​⌋, q = n % m q = n \% m q=n%m。那么有 m − q m-q m−q个队伍中有 p p p个人,有 q q q个队伍中有 p + 1 p+1 p+1个人。

则 f ( n , m ) f(n,m) f(n,m)的值为:

前 q q q个: ( p + 1 ) × ( m − p − 1 ) + ( p + 1 ) × ( m − 2 p − 2 ) + . . . + ( p + 1 ) × ( m − q p − q ) (p+1) \times (m - p - 1) + (p+1) \times (m - 2p-2) +...+(p+1) \times (m - qp-q) (p+1)×(m−p−1)+(p+1)×(m−2p−2)+...+(p+1)×(m−qp−q)。

令 Q = ( p + 1 ) × q Q = (p+1) \times q Q=(p+1)×q,则后 m − q m-q m−q个: p × ( m − Q − p ) + p × ( m − Q − 2 p ) + . . . + p × ( m − Q − ( m − q ) p ) p \times (m - Q - p) + p \times (m - Q - 2p) +...+ p \times (m - Q - (m - q)p) p×(m−Q−p)+p×(m−Q−2p)+...+p×(m−Q−(m−q)p)。

根据等差数列求和公式,可以一步得出 f ( n , m ) f(n,m) f(n,m)的值。

因为所有测试用例的 c 1 + c 2 + . . . + c n c_{1}+c_{2}+...+c_{n} c1​+c2​+...+cn​的和不会超过 2 e 5 2e5 2e5,因此我们可以直接枚举种族和队伍个数进行计算,最后差分前缀和就可以了。

时间复杂度: O ( O( O(能过 ) ) )

代码

#pragma GCC optimize("O2")
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5 + 5, M = 1e6 + 5;
const int mod = 998244353;
const int inf = 0x3f3f3f3f3f3f3f3f;

int n, b, x;
int c[N], dp[N];
int func(int n, int m)
{	//计算n个人分到m个队伍可以增加的最多的b单位兵力
	int p = n / m;
	int q = n % m;
	int ans = 0;
	if (m - q > 0)
	{
		ans = (p + 1) * (n * q - q * (q + 1) * (p + 1) / 2);
	}
	else ans = (p + 1) * (n * (q - 1) - (q - 1) * q * (p + 1) / 2);

	int Q = (p + 1) * q;
	if (m - q > 0)
		ans += p * ((n - Q) * (m - q - 1) - (m - q - 1) * (m - q) * p / 2);
	return ans;
}
void solve()
{
	cin >> n >> b >> x;
	for (int i = 1; i <= n; i++)
	{
		cin >> c[i];
	}
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j < c[i]; j++)
		{
			int acc = func(c[i], j) * b;
			dp[j] += acc;
			dp[j + 1] -= acc;
		}
		int acc = func(c[i], c[i]) * b;
		dp[c[i]] += acc;
	}
	int maxx = *max_element(c + 1, c + 1 + n);
	int ans = 0;
	for (int i = 1; i <= maxx; i++)
	{
		dp[i] += dp[i - 1];
		ans = max(ans, dp[i] - (i - 1) * x);
	}
	for (int i = 1; i <= maxx + 1; i++)
		dp[i] = 0;
	cout << ans << endl;
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	int test = 1;
	cin >> test;
	for (int i = 1; i <= test; i++)
	{
		solve();
	}
	return 0;
}

标签:acc,Mountain,Lonely,int,Dungeons,times,ans,+...+,dp
From: https://blog.csdn.net/weixin_74754298/article/details/143001073

相关文章

  • Mountain Craft
    题目依旧是T4找不到原题挂个pdf题目下载算法由于题目给的特殊性质两条斜线都可以映射到\(x\)轴上处理题目转化成线段上维护\(\text{并长}\times\sqrt{2}\)于是非常好打但是要先离散化代码后补总结重叠类题目考虑线段树,一般转化到一维上一个我经常掉进去......
  • The 2024 ICPC Asia EC Regionals Online Contest (II) - Problem B. Mountain Bookin
    从$1$到$m$依次考虑每个日期。假设当前正在考虑第$i$天,那么只有第$i$天来访的游客以及指定第$i$天的查询是有用的。将这些游客和查询都提取出来,通过Kruskal重构树可以很方便地在$O(n\logn)$的时间内计算出这些查询的答案。不幸的是,本题还有加边删边操作,无法轻易地......
  • kedaOJ-#P2574. [USACO 21DEC.B] Lonely Photo
    题目[USACO21DEC.B]LonelyPhoto思路include<bits/stdc++.h>usingnamespacestd;defineintlonglongdefineN500010intn,m,i,j,k;intl[N],r[N],ans;chara[N];signedmain(){scanf("%d%s",&n,a+1);for(i=1,k=0;i<=n;++i)......
  • 打卡信奥刷题(112)用Scratch图形化工具信奥P6181 [普及组][USACO10OPEN] Mountain Watch
    [USACO10OPEN]MountainWatchingS题目描述一天,Bessie望着远处的山脉,在思考:“哪一座山最宽呢?”Bessie设法测量了NNN个位置的高度......
  • 手把手教你做阅读理解提高003-Letters Cheer Up Lonely Seniors-信件让孤独的老年人振
    PDF格式公众号回复关键字:ZKYDT003阅读理解技巧,在帮助读者有效获取和理解文本信息方面发挥着重要作用,熟练掌握如下6个技巧,可快速突破阅读理解1预览文章结构在开始深入阅读之前,快速浏览文章的标题、段落开头和结尾,可以迅速把握文章的主题、大致内容和结构标题通常能概括文......
  • 250 Stylized Mountain Cave Textures - Cliff Rock Crystal Gravel More
    250多种风格化的水晶、岩石、悬崖、砾石、矿石、熔岩和其他岩石纹理的集合,用于山地和洞穴风格化/幻想/rpg风格的游戏环境。在这个系列中,你会在风格化/幻想/rpg风格的游戏中找到大量适合山区和洞穴环境的纹理——水晶、洞穴地板/墙壁、岩石、悬崖、砾石、熔岩、岩石土、岩石地......
  • D. Lonely Mountain Dungeons
    原题链接题解每个种族的贡献是互不干扰的,因此只需要计算每个族群在每个组数的情况下的解然后累加就行了,由于每个族群在组数大于等于\(c_i\)的时候解数不变,所以这里用到了差分小技巧然后就是计算每个族群在每个组数下的解就行了code#definelllonglong#include<bits/std......
  • 【游戏设计随笔06】关于《塞尔达传说》的迷宫设计(dungeons design)的一些思考
    在塞尔达里,迷宫是多个小房间的组合,有些锁着的小房间是需要“小钥匙”这一道具去解锁才能通行的。关卡设计问题的出现:初代的塞尔达中,钥匙可以在整部游戏的任何门上使用,这导致了各种麻烦的情况。通常你持有的钥匙是大于需要解锁的房间的,因为随着游戏进程的推进,一些需要解......
  • LeetCode 2345. Finding the Number of Visible Mountains
    原题链接在这里:https://leetcode.com/problems/finding-the-number-of-visible-mountains/description/题目:Youaregivena 0-indexed 2Dintegerarray peaks where peaks[i]=[xi,yi] statesthatmountain i hasapeakatcoordinates (xi,yi).Amountaincan......
  • Lonely Mountain Dungeons
    这道题目为什么考场上没想出来。。。就是不太相信自己吧,而且有个技巧不太清楚。。哎很明显的一点是各个种族是分开的,所以我们每个种族单独考虑就好了假设对于一个种族,我们已经固定了分的组数为\(k\)了,那么肯定是“平均”分到每个组是最好的(这点没办法证明,但是我考场上就是想得这......