打卡信奥刷题(3512)用C++实现信奥题 P10867 [HBCPC2024] Points on the Number Axis A

P10867 [HBCPC2024] Points on the Number Axis A

题目描述

Alice 正在数轴上玩一个单人游戏。

数轴上有 nnn 个点。每次,玩家选择两个点。这两个点将被移除,并添加它们的中点。当数轴上只剩下一个点时,游戏结束。形式上,如果选择的两个点是 xix_ixixjx_jxj,那么在操作后将添加 xi+xj2\dfrac{x_i+x_j}{2}2xi+xj

为了愉快地进行这个游戏,Alice 总是随机选择两个点。

现在 Alice 有一个问题:最后一个点的期望位置在哪里。

可以证明,答案可以表示成 pq\dfrac{p}{q}qp 的形式,你只需要输出 p⋅q−1 mod 998 244 353p\cdot q^{-1} \bmod 998\,244\,353pq1mod998244353 的值。

输入格式

第一行包含一个整数 nnn (1≤n≤1061 \le n \le 10^61n106)。

第二行包含 nnn 个整数 xix_ixi (0≤x1≤⋯≤xn<998 244 3530 \le x_1 \le \dots \le x_n < 998\,244\,3530x1xn<998244353),表示第 iii 个点的位置。

注意,两个点可能在同一位置。

输出格式

输出一个整数,即答案对 998 244 353998\,244\,353998244353 取模后的结果。

输入输出样例 #1

输入 #1

3
1 2 4

输出 #1

332748120

说明/提示

(由 ChatGPT 4o 翻译)

C++实现

#include <bits/stdc++.h>
#define PII pair <int, int>
#define int long long
#define DB double

using namespace std;

const int N = 1e6 + 10, MOD = 998244353;
int n, x, sum;

int kuaisu(int x, int y)
{
	int ret = 1;
	while(y)
	{
		if(y & 1)
			ret = ret * x % MOD;
		x = x * x % MOD;
		y >>= 1;
	}
	return ret;
}

signed main()
{
	scanf("%lld", &n);
	
	for(int i = 1; i <= n; i ++ )
	{
		scanf("%lld", &x);
		sum = (x + sum) % MOD;
	}
	
	printf("%lld\n", sum * kuaisu(n, MOD - 2) % MOD);
	
	return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值