首页 > 其他分享 >CodeForces 1951G Clacking Balls

CodeForces 1951G Clacking Balls

时间:2024-04-16 14:13:17浏览次数:21  
标签:Clacking typedef Balls limits ll long 1951G sum mod

洛谷传送门

CF 传送门

考虑用相邻两个球之间的距离来描述一个状态。

设距离序列为 \(a_1, a_2, \ldots, a_k\)(忽略 \(0\))。考虑鞅与停时定理,设一个状态的势能为 \(\sum\limits_{i = 1}^k f(a_i)\),一次操作能使得势能期望减少 \(1\)。那么:

\[1 = \frac{1}{n} \sum\limits_{i = 1}^k f(a_i) + f(a_{i \bmod n + 1}) - f(a_i - 1) - f(a_{i \bmod n + 1} + 1) \]

设 \(g(x) = f(x + 1) - f(x)\),有:

\[n = \sum\limits_{i = 1}^k g(a_i - 1) - g(a_{i \bmod n + 1}) \]

考虑每个数的贡献,有:

\[n = \sum\limits_{i = 1}^k g(a_i - 1) - g(a_i) \]

不难发现令 \(g(x - 1) - g(x) = \frac{n}{m} x\) 满足要求,因为 \(\sum\limits_{i = 1}^k a_i\) 恒等于 \(m\)。

若令 \(g(0) = 0\),那么 \(g(x) = -\frac{n}{m} \binom{x + 1}{2}\),因为我们需要在操作后删除 \(a\) 中的 \(0\) 所以必须令 \(f(0) = 0\),那么有 \(f(x) = -\frac{n}{m} \binom{x + 1}{3}\)。

终止状态的势能为 \(f(m)\)。于是用初始状态势能减去终止状态势能就是答案。时间复杂度 \(O(n \log n)\)(瓶颈在对每个球的位置排序)。

code
// Problem: G. Clacking Balls
// Contest: Codeforces - Codeforces Global Round 25
// URL: https://codeforces.com/problemset/problem/1951/G
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include <bits/stdc++.h>
#define pb emplace_back
#define fst first
#define scd second
#define mkp make_pair
#define mems(a, x) memset((a), (x), sizeof(a))

using namespace std;
typedef long long ll;
typedef double db;
typedef unsigned long long ull;
typedef long double ldb;
typedef pair<ll, ll> pii;

const int maxn = 300100;
const ll mod = 1000000007;
const ll inv6 = (mod + 5) / 6;

inline ll qpow(ll b, ll p) {
	ll res = 1;
	while (p) {
		if (p & 1) {
			res = res * b % mod;
		}
		b = b * b % mod;
		p >>= 1;
	}
	return res;
}

ll n, m, a[maxn], inv, b[maxn];

inline ll f(ll x) {
	return (mod - n * inv % mod * (x + 1) % mod * x % mod * (x - 1) % mod * inv6 % mod) % mod;
}

void solve() {
	scanf("%lld%lld", &n, &m);
	inv = qpow(m, mod - 2);
	ll ans = (mod - f(m)) % mod;
	for (int i = 1; i <= n; ++i) {
		scanf("%lld", &a[i]);
	}
	sort(a + 1, a + n + 1);
	for (int i = 1; i < n; ++i) {
		b[i] = a[i + 1] - a[i];
	}
	b[n] = a[1] + m - a[n];
	for (int i = 1; i <= n; ++i) {
		ans = (ans + f(b[i])) % mod;
	}
	printf("%lld\n", ans);
}

int main() {
	int T = 1;
	scanf("%d", &T);
	while (T--) {
		solve();
	}
	return 0;
}

标签:Clacking,typedef,Balls,limits,ll,long,1951G,sum,mod
From: https://www.cnblogs.com/zltzlt-blog/p/18137959

相关文章

  • D. Colored Balls
    D.ColoredBallsThereareballsof$n$differentcolors;thenumberofballsofthe$i$-thcoloris$a_i$.Theballscanbecombinedintogroups.Eachgroupshouldcontainatmost$2$balls,andnomorethan$1$ballofeachcolor.Considerall$2^n$set......
  • 14 CodeTON Round 5 (Div. 1 + Div. 2, Rated, Prizes!)C. Tenzing and Balls(dp+前缀
    思路:dp还是挺明显的,思路可以参考最长上升子序列有点dp的感觉\(f[i]\)表示考虑前\(i\)个数,的最大值当前数有两种删或不删不删:\(f[i]=f[i-1]\);删:\(f[i]=max{f[j-1]+i-j+1}\)这个转移是\(O(n^2)\)的显然时间上来不及考虑优化,第一层循环一定是省不了的考虑优化掉第二层循环......
  • [AGC037B] RGB Balls
    题意有\(n\)个人,\(3\timesn\)个球,球有三种颜色,每种颜色恰好\(n\)个。给每个人每种颜色的球各一个,按照在原序列的顺序分别设为\(p1,p2,p3\)。试求使得\(\sump_3-p_1\)最小的方案数。Sol其实直接考虑就行了,没必要想那么复杂。假设当前的球的颜色为\(R\),之前......
  • 小球游戏 -- balls in a line
    ;Ballsinaline;withA-Starpanthfind;2023.6EnableExplicit#wd=65;width#Xc=20#Yc=20#obstruct=1#channel=0#BallsCount=10DeclareModuleLinearlySpacedValueDeclare.fFloat(IncrementID.l,IncrementMax.l,MinValue.f,MaxValue.f)EndDe......
  • ABC332G Not Too Many Balls 题解
    第\(i\)种球有\(a_i\)个,共\(n\)种。第\(i\)种箱子最多共装\(b_i\)个球。共\(m\)种。第\(i\)种球在第\(j\)种箱子里至多放\(ij\)个。问所有箱子放的球数最多是多少。\(1\leqn\leq500,1\leqm\leq5e5,0\leqa_i,b_i\leq1e12\)。很容易建出网络流模型。......
  • 【题解】AtCoder abc332_g Not Too Many Balls
    传送门:https://atcoder.jp/contests/abc332/tasks/abc332_g看完题,第一眼反应为最大流。建模方式为:以颜色为左部点,盒子为右部点,源点$S$向颜色$i$连一条容量为$A_i$的边,盒子$j$向汇点$T$连一条容量为$B_j$的边,颜色$i$向盒子$j$连一条容量为$ij$的边;在这张图......
  • CodeForces 1060G Balls and Pockets
    洛谷传送门CF传送门NOIP模拟赛T2。很厉害的题。想象数轴上\(a_1,a_2,\ldots,a_n\)位置上各有一个洞,每个非负整数位置上有一个点。每次操作相当于,对于每个点,如果它刚好位于一个洞,那么它会掉进去;否则设它的位置为\(p\),位置在它前面的洞有\(t\)个,那么这个点的位置变成......
  • 「解题报告」[AGC007C] Pushing Balls
    非常高级的题,但是感觉官方题解的做法和洛谷大部分题解的做法都并不很能说服我,感觉根据规律发现期望序列还是等差数列有点扯了。但是zhylj的题解的做法感觉很强啊,但是他题解后面的推导感觉好像有点问题。所以整出来这样一个做法,感觉还是很清楚的。首先我们可以考虑将原问题转化......
  • Educational Codeforces Round 151 (Rated for Div. 2)E. Boxes and Balls(数学,动态规
    题目链接:https://codeforces.com/contest/1845/problem/E 题意: 给定长度为n且只含0和1的数组,你可以进行以下操作: 交换相邻的0和1; 给正整数k,问经过k次操作后,会有多少种本质不同的结果; 分析: 如果1比0多,我们可以把他们取反(让0比1多,结果是一样的) 设计状态dp[i][j......
  • 题解 P7971【[KSN2021] Colouring Balls】
    postedon2022-10-0819:07:28|under题解|sourceproblem交互库有一个长为\(n\)的颜色序列,你可以询问区间\([l,r]\)中有多少种颜色,最后还原交互库手中的序列,只需要保持相对顺序不变。\(n\leq10^3\),最多询问次数\(Q=2000\)或\(Q=10^4\)。solution令\(C\)为\([1......