2021牛客暑期多校训练营4补题目记录

Tree Xor

#include <bits/stdc++.h>
using namespace std;
#define pb push_back
const int M = (1<<30)-1;
const int N = 100005;
int num,to[N<<1],nxt[N<<1],head[N],co[N<<1];
int L[N],R[N],a[N];
int n;
void add(int u,int v,int w)
{
    ++num;
    nxt[num]=head[u];
    to[num]=v; co[num]=w;
    head[u]=num;
}
void tr_dfs(int x,int pre,int v)
{
    a[x]=v;
    for (int e=head[x];e;e=nxt[e]) if (to[e]!=pre)
        tr_dfs(to[e],x,v^co[e]);
}
int tr[N*60],lc[N*60],rc[N*60]; 
int nodecnt=0,rt=0;
int ans=0;
void modify(int&p,int l,int r,int ql,int qr,int val,int i){
    if(r<ql||l>qr)return;
    if(!p)p=++nodecnt;
    if(ql<=l&&qr>=r){
        tr[p]++;
        return;
    }
    int mid=(l+r)>>1;
    if((val>>i)&1){
        modify(lc[p],mid+1,r,ql,qr,val,i-1);modify(rc[p],l,mid,ql,qr,val,i-1);
    }else{
        modify(lc[p],l,mid,ql,qr,val,i-1);modify(rc[p],mid+1,r,ql,qr,val,i-1);        
    }
}
int que(int x,int l,int r,int cnt){
    if(!x)return 0;
    cnt+=tr[x];
    if(cnt==n){
        return r-l+1;
    }
    int mid=(l+r)>>1;
    return que(lc[x],l,mid,cnt)+que(rc[x],mid+1,r,cnt);
}
int main()
{
    cin>>n;
    for (int i=1;i<=n;++i) scanf("%d%d",&L[i],&R[i]);
    for (int i=1,u,v,w;i<n;++i) scanf("%d%d%d",&u,&v,&w),add(u,v,w),add(v,u,w);
    tr_dfs(1,0,0);
    for(int i=1;i<=n;i++)modify(rt,0,M,L[i],R[i],a[i],29);
    cout<<que(rt,0,M,0)<<endl;
    return 0;
}

Sample Game

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod=998244353;
const int N=1e2+5;
ll dp[N],f[N],w[N],p[N],sum[N],num[N];
ll n,s;
ll pow(ll a,ll b)
{
    ll ret=1;
    while(b)
    {
        if(b&1)
            ret=ret*a%mod;
        a=a*a%mod;
        b>>=1;
    }
    return ret;
}
int main()
{
    scanf("%lld",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%lld",&w[i]);
        s+=w[i];
    }
    for(int i=1;i<=n;i++)
        p[i]=pow(s,mod-2)*w[i]%mod;
    num[n]=0;
    for(int i=n;i>=1;i--){
        f[i]=(1+num[i])*pow(1-p[i]+mod,mod-2)%mod;
        num[i-1]=(num[i]+p[i]*f[i]%mod)%mod;
    }
    num[n]=0;
    long long ans=0;
    for(int i=n;i>=1;i--){
        dp[i]=(1+2*p[i]*f[i]%mod+num[i])%mod*pow(1-p[i]+mod,mod-2)%mod;
        num[i-1]=(num[i]+p[i]*(dp[i]+2*f[i])%mod)%mod;
        ans=(ans+p[i]*(dp[i]+2*f[i])%mod)%mod;
    }
    ans=(ans+1)%mod;
    cout<<ans<<endl;
    return 0;
}
全部评论

相关推荐

HR_丸山彩同学:你的项目描述里,系统设计讲了很多:MemCube是什么、三级存储架构怎么设计、四种遗忘策略分别是什么。这些面试的时候讲没问题,但简历上不需要这么细。 简历要突出的是影响力,不是实现细节。面试官看简历的时候想知道的是「这个项目有多大价值」,不是「这个项目具体怎么实现的」。实现细节是面试时候聊的 怎么改:技术细节可以精简为一句「采用三级存储架构+四种遗忘策略」,把省出来的篇幅用来写影响力。比如:项目有没有开源?有没有写成技术博客?有没有被别人使用过? 校园经历没有任何信息量,任何人都可以写这句话,写了等于没写。更关键的是,你投的是技术岗,校园活动经历本来就不是加分项。如果非要写,必须写出具体的数字和成果。如果你没有这些数字,那就老老实实删掉 「端到端耗时缩减30-40%」要给出确切数字和绝对值。从1000ms降到600ms是降了40%,从100ms降到60ms也是降了40%,但这两个含义完全不一样。其他也是,涉及到数据,准备好证据,口径统一,面试会问 「熟练」「熟悉」「了解」混在一起用,读起来很乱。而且「了解前端需求」最好改成「具备前后端协作经验」
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务