2024牛客暑期多校第一场

H

一开始以为考后缀和,耽误了一会。后面直接看样例猜结论,数字乘位置为对答案的贡献

#include<bits/stdc++.h>

using namespace std;

#define int long long
#define PII pair<int,int>

const int M=1000000007;

void solve()
{
    int n;cin>>n;
    stack<int>st;
    int sum=0;
    for(int i=1;i<=n;i++){
        int ou,in;cin>>ou>>in;
        while(ou--&&!st.empty()){sum-=st.top()*st.size()%M;st.pop();}
        st.push(in);sum+=in*st.size()%M;
        cout<<sum%M<<'\n';
    }
}

signed main()
{
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    solve();
    return 0;
}

H

目标队前面的队如果可以挪就挪走,就是一个排序减去前面的去重

#include<bits/stdc++.h>

using namespace std;

#define int long long
#define PII pair<int,int>

struct st{
    string s;int gra;int tim;
};

bool cmp(st s,st b){
    if(s.gra!=b.gra)return s.gra>b.gra;
    else return s.tim<b.tim;
}

void solve()
{
    int n;cin>>n;
    map<string,int>mp;
    mp.clear();
    vector<st>s6(n);
    for(int i=0;i<n;i++){
        cin>>s6[i].s>>s6[i].gra>>s6[i].tim;
        mp[s6[i].s]++;
    }
    int m;cin>>m;
    vector<st>s7(m);
    for(int i=0;i<m;i++){
        cin>>s7[i].s>>s7[i].gra>>s7[i].tim;
        mp[s7[i].s]++;
    }
    
    /*
    cout<<'\n';
    for(int i=0;i<n;i++)cout<<s6[i].s<<' '<<s6[i].gra<<' '<<s6[i].tim<<'\n';
    cout<<'\n';
    for(int i=0;i<m;i++)cout<<s7[i].s<<' '<<s7[i].gra<<' '<<s7[i].tim<<'\n';
    */
    
    sort(s6.begin(),s6.end(),cmp);
    sort(s7.begin(),s7.end(),cmp);
    
    /*
    cout<<'\n';
    for(int i=0;i<n;i++)cout<<s6[i].s<<' '<<s6[i].gra<<' '<<s6[i].tim<<'\n';
    cout<<'\n';
    for(int i=0;i<m;i++)cout<<s7[i].s<<' '<<s7[i].gra<<' '<<s7[i].tim<<'\n';
    */
    
    int rak;
    int cnt=0;
    for(int i=0;i<n;i++){
        if(s6[i].s=="lzr010506"){
            rak=i+1-cnt;
            cnt=0;
            break;
        }
        if(mp[s6[i].s]==2)cnt++;
    }
    int ans=0;
    for(int i=0;i<m;i++){
        if(s7[i].s=="lzr010506"){
            ans=i+1-cnt;
            break;
        }
        if(mp[s7[i].s]==2)cnt++;
    }
    cout<<min(rak,ans)<<'\n';
}

signed main()
{
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    solve();
    return 0;
}

A

数学推公式+快速幂+组合数

思路

在这里插入图片描述
在这里插入图片描述

板子

//快速幂

int fapo(int base,int pow){
    int result=1;
    while(pow){
        if(pow&1)result*=base;
        base*=base;
        pow>>=1;
    }
    return result;
}

//杨辉三角推组合数

int cont[5005][5005];

void solve()
{
    cont[1][1]=1;
    for(int i=0;i<=5001;i++){
        cont[i][i]=1;
        cont[i][0]=1;
    }
    for(int i=1;i<=5000;i++){
        for(int j=1;j<i;j++){
            cont[i][j]=cont[i-1][j-1]+cont[i-1][j];
        }
    }
}

ACcode

#include<bits/stdc++.h>

using namespace std;

#define int long long
#define PII pair<int,int>

int cont[5005][5005];

int ct(int x,int y){
    return cont[x][y];
}

int fapo(int base,int po,int q){
    int result=1%q;
    while(po){
        if(po&1)result=(result*base)%q;
        base=(base*base)%q;
        po>>=1;
    }
    return result;
}

void solve()
{
    int n,m,q;cin>>n>>m>>q;

    cont[1][1]=1;
    for(int i=0;i<=5001;i++){
        cont[i][i]=1;
        cont[i][0]=1;
    }

    for(int i=1;i<=5001;i++){
        for(int j=1;j<i;j++){
            cont[i][j]=(cont[i-1][j-1]%q+cont[i-1][j]%q)%q;
        }
    }//组合数
    int sum=0;
    for(int i=1;i<=n;i++){
        sum=(sum+(ct(n,i)%q*fapo(fapo(2,(n-i),q)%q,(m-1),q)%q*fapo(fapo(2,i,q)-1,m-1,q)%q)%q)%q;
    }
    cout<<sum<<'\n';
}

signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    solve();
    return 0;
}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值