牛客练习赛 55

A - 等火车

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int mod=1e9+7;
int main()
{
    IO;
    int T=1;
    //cin>>T;
    while(T--)
    {
        int s,q;
        cin>>s>>q;
        while(q--)
        {
            int t;
            cin>>t;
            if(t%s) cout<<s-t%s<<'\n';
            else cout<<0<<'\n';
        }
    }
    
    return 0;
    
}

B - 数字游戏

在这里插入图片描述

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int mod=1e9+7;
int main()
{
    IO;
    int T=1;
    //cin>>T;
    while(T--)
    {
        ll n;
        cin>>n;
        cout<<n-1<<'\n';
    }
    
    return 0;
    
}

C - 最大生成树

贪心直接求即可

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const ll mod=998244353;
int main()
{
    IO;
    int T=1;
    //cin>>T;
    while(T--)
    {
        ll n;
        cin>>n;
        ll a=n/2;
        a%=mod;
        cout<<((3*a*a%mod-3*a%mod+1)%mod+mod)%mod;
    }
    
    return 0;
    
}

E - 树

真就化简式子呗???
d i s t ( x , y ) = d e p ( x ) + d e p ( y ) − 2 d e p ( l c a ( x , y ) ) dist(x,y)=dep(x)+dep(y)-2dep(lca(x,y)) dist(x,y)=dep(x)+dep(y)2dep(lca(x,y))
于是可知
∑ x = 1 n ∑ y = 1 n d i s t 2 ( x , y ) = ∑ x = 1 n ∑ y = 1 n d e p 2 ( x ) + d e p 2 ( y ) + 2 d e p ( x ) d e p ( y ) + 4 d e p 2 ( l c a ( x , y ) ) − 4 d e p ( l c a ( x , y ) ) × ( d e p ( x ) + d e p ( y ) ) \sum_{x=1}^{n}\sum_{y=1}^{n}dist^2(x,y)=\sum_{x=1}^{n}\sum_{y=1}^{n}dep^2(x)+dep^2(y)+2dep(x)dep(y)+4dep^2(lca(x,y))-4dep(lca(x,y))×(dep(x)+dep(y)) x=1ny=1ndist2(x,y)=x=1ny=1ndep2(x)+dep2(y)+2dep(x)dep(y)+4dep2(lca(x,y))4dep(lca(x,y))×(dep(x)+dep(y))
对于前三项
∑ x = 1 n ∑ y = 1 n d e p 2 ( x ) + d e p 2 ( y ) = 2 ∑ x = 1 n d e p 2 ( x ) \sum_{x=1}^{n}\sum_{y=1}^{n}dep^2(x)+dep^2(y)=2\sum_{x=1}^{n}dep^2(x) x=1ny=1ndep2(x)+dep2(y)=2x=1ndep2(x)
2 ∑ x = 1 n ∑ y = 1 n d e p ( x ) d e p ( y ) = 2 ∑ x = 1 n d e p ( x ) ∑ y = 1 n d e p ( y ) = 2 ( ∑ x = 1 n d e p ( x ) ) 2 2\sum_{x=1}^{n}\sum_{y=1}^{n}dep(x)dep(y)=2\sum_{x=1}^{n}dep(x)\sum_{y=1}^{n}dep(y)=2(\sum_{x=1}^{n}dep(x))^2 2x=1ny=1ndep(x)dep(y)=2x=1ndep(x)y=1ndep(y)=2(x=1ndep(x))2
对于后两项可以枚举公共祖先
∑ x = 1 n ∑ y = 1 n d e p 2 ( l c a ( x , y ) ) = ∑ u = l c a ( x , y ) d e p 2 ( u ) × ( s z 2 ( u ) − ∑ j ∈ s o n ( u ) s z 2 ( j ) ) \sum_{x=1}^{n}\sum_{y=1}^{n}dep^2(lca(x,y))=\sum_{u=lca(x,y)}dep^2(u)×(sz^2(u)-\sum_{j\in son(u)}sz^2(j)) x=1ny=1ndep2(lca(x,y))=u=lca(x,y)dep2(u)×(sz2(u)json(u)sz2(j))
∑ x = 1 n ∑ y = 1 n d e p ( l c a ( x , y ) ) × ( d e p ( x ) + d e p ( y ) ) = ∑ u = l c a ( x , y ) [ 2 ∑ j ∈ s o n ( u ) s u m ( j ) ( s z ( u ) − s z ( j ) ) + 2 d e p ( u ) s z ( u ) ] \sum_{x=1}^{n}\sum_{y=1}^{n}dep(lca(x,y))×(dep(x)+dep(y))=\sum_{u=lca(x,y)}[2\sum_{j\in son(u)}sum(j)(sz(u)-sz(j))+2dep(u)sz(u)] x=1ny=1ndep(lca(x,y))×(dep(x)+dep(y))=u=lca(x,y)[2json(u)sum(j)(sz(u)sz(j))+2dep(u)sz(u)]

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<cmath>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N=1000010;
const ll mod=998244353;
int h[N],e[2*N],ne[2*N],idx;
ll dep[N],sum[N],sz[N];
ll res;
int n;
void add(int a,int b)
{
    e[idx]=b;
    ne[idx]=h[a];
    h[a]=idx++;
}
void dfs1(int u,int fa)
{
    dep[u]=dep[fa]+1;
    sz[u]=1;
    sum[u]=dep[u];
    for(int i=h[u];i!=-1;i=ne[i])
    {
        int j=e[i];
        if(j==fa) continue;
        dfs1(j,u);
        sz[u]+=sz[j];
        sum[u]=(sum[u]+sum[j])%mod;
    }
}
void dfs2(int u,int fa)
{
    ll s1=sz[u]*sz[u]%mod,s2=2*dep[u]*sz[u]%mod;
    for(int i=h[u];i!=-1;i=ne[i])
    {
        int j=e[i];
        if(j==fa) continue;
        dfs2(j,u);
        s1=(s1-sz[j]*sz[j]%mod)%mod;
        s2=(s2+2*sum[j]*(sz[u]-sz[j])%mod)%mod;
    }
    res=(res+4*s1*dep[u]%mod*dep[u])%mod;
    res=(res-4*s2*dep[u]%mod)%mod;
}
int main()
{
    IO;
    int T=1;
    //cin>>T;
    while(T--)
    {
        memset(h,-1,sizeof h);
        cin>>n;
        for(int i=1;i<n;i++)
        {
            int a,b;
            cin>>a>>b;
            add(a,b),add(b,a);
        }
        dfs1(1,0);
        ll s=0;
        for(int i=1;i<=n;i++) 
        {
            s=(s+dep[i])%mod;
            res=(res+2ll*n*dep[i]%mod*dep[i])%mod;
        }
        res=(res+2*s*s%mod)%mod;
        dfs2(1,0);
        res=(res%mod+mod)%mod;
        cout<<res<<'\n';
        
    }
    return 0;
}

这就是数学的魅力吗?爱了爱了
要加油哦~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值