牛客练习赛55 C 最大生成树

H y p e r l i n k Hyperlink Hyperlink

https://ac.nowcoder.com/acm/contest/2927/C


D e s c r i p t i o n Description Description

有一张大小为 n n n的完全图, d i s t ( i , j ) = ∣ i − j ∣ dist(i,j)=|i-j| dist(i,j)=ij,求该图最大生成树的边权和,答案对998244353取模

数据范围: n ≤ 1 0 18 , n n\leq 10^{18},n n1018,n是偶数


S o l u t i o n Solution Solution

结论题继续

首先前面一半的点连 n n n
后面一半的点连1

考虑计算答案

前半段: n − m i d + ( n − m i d + 1 ) + ( n − m i d + 2 ) + ( n − m i d + 3 ) … + ( n − 2 ) + ( n − 1 ) n-mid+(n-mid+1)+(n-mid+2)+(n-mid+3)…+(n-2)+(n-1) nmid+(nmid+1)+(nmid+2)+(nmid+3)+(n2)+(n1)
后半段答案与上面相同( n n n为偶数,性质显然)

发现这就是一个等差数列,直接首末和与项数积的一半,然后因为前半段等于后半段抵掉一半

加之 ( 1 , n ) , ( n , 1 ) (1,n),(n,1) (1,n),(n,1)多连了一条,减去它的权值 n − 1 n-1 n1即可

于是

A n s = ( m i d + n − 1 ) m i d − n − 1 Ans=(mid+n-1)mid-n-1 Ans=(mid+n1)midn1

恶心点在于卡 l o n g   l o n g long\ long long long,你可以用 i n t _ _ 128 int\_\_128 int__128或者快速幂求逆元解决

但是 p y t h o n python python显然更好

时间复杂度: O ( ? ) O(?) O(?)


C o d e Code Code
n=input()
mid=n/2
a=(mid+n-1)*mid
print((a-(n-1))%998244353)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值