码蹄集部分题目(2024OJ赛9.11-9.15;模拟+树状数组+单调队列+并查集)

1🐋🐋利刃华尔兹(黄金;模拟)

时间限制:1秒

占用内存:64M

🐟题目思路

2024年码蹄杯职业院校赛道决赛题解_哔哩哔哩_bilibili

🐟代码

#include<bits/stdc++.h> 
using namespace std;

int main( )
{
    double a,b,k;
    cin>>a>>b>>k;
    //根据规则,4是固定伤害,什么时候用都可以,剩下的根据攻击次数和攻击力排序为1、2、3
    double ans=500;
    b+=b*0.2;
    //使用技能1
    ans+=a+0.9*b;
    b+=b*0.2;
    //使用技能2
    ans+=a;
    b+=b*0.2;
    ans+=a+2*b;
    b+=b*0.2;
    //使用技能3
    for(int i=0;i<4;i++){
        ans+=a+5*b;
        b+=b*0.2;
    }
    //cout<<ans<<" "<<k<<endl;
    if(ans>=k) cout<<"You have slain an enemy";
    else cout<<"You have been slain";
    return 0;
}

2🐋🐋多项式输入(黄金;模拟)

时间限制:1秒

占用内存:64M

🐟题目思路

2024年码蹄杯职业院校赛道初赛第三场题解_哔哩哔哩_bilibili

🐟代码

#include<bits/stdc++.h> 
using namespace std;

int main( )
{
    int n;
    cin>>n;
    vector<int> a(n+5);
    for(int i=n;i>=0;i--) cin>>a[i];
    string s;
    if(a[n]==-1){
        s+="-x^";
        s+=to_string(n);
    }
    else if(a[n]==1){
        s+="x^";
        s+=to_string(n);
    }
    else if(a[n]!=0){
        s+=to_string(a[n]);
        s+="x^";
        s+=to_string(n);
    }
    for(int i=n-1;i>=1;i--){
        if(a[i]==0) continue;
        if(a[i]==-1){
            if(i==1) s+="-x";
            else{
                s+="-x^";
                s+=to_string(i);
            }    
        }
        else if(a[i]==1){
            if(s!="") s+="+";
            if(i==1) s+="x";
            else{
                s+="x^";
                s+=to_string(i);
            }  
        }
        else if(a[i]<0){
            s+=to_string(a[i]);
            if(i==1) s+="x";
            else{
                s+="x^";
                s+=to_string(i);
            }
        }
        else{
            s+="+";
            s+=to_string(a[i]);
            if(i==1) s+="x";
            else{
                s+="x^";
                s+=to_string(i);
            }
        }
    }
    //cout<<a[0]<<endl;//
    if(s=="") s+=to_string(a[0]);
    else{
        if(a[0]<0) s+=to_string(a[0]);
        else if(a[0]>0){
            s+="+";
            s+=to_string(a[0]);
        }
    }
    
    cout<<s;
    return 0;
}

3🐋🐋区间数据处理(星耀;树状数组)🍰

时间限制:2秒

占用内存:512M

🐟题目思路

2024年码蹄杯职业院校赛道决赛题解_哔哩哔哩_bilibili

🐟代码

#include<bits/stdc++.h> 
using namespace std;
const int N=1e6+5;
int n,m,a[N],tree[N],ans[N];

struct QUERY{
    int l,r,h,no;
}query[N];

struct number{
    int h,no;
}numbers[N];

int lowbit(int x) {return x&-x;}

void add(int i){
    for(;i<=n;i+=lowbit(i)) tree[i]++;
}

bool cmp1(number a,number b) {return a.h>b.h;}

bool cmp2(QUERY a,QUERY b) {return a.h>b.h;}

int sum(int i){
    int ans=0;
    for(;i>0;i-=lowbit(i)){
        ans+=tree[i];
    }
    return ans;
}

int main( )
{
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>numbers[i].h;
        numbers[i].no=i;
    }
    for(int i=1;i<=m;i++){
        cin>>query[i].l>>query[i].r>>query[i].h;
        query[i].no=i;
    }
    sort(numbers+1,numbers+1+n,cmp1);
    sort(query+1,query+1+m,cmp2);
    int id=1;
    for(int i=1;i<=m;i++){
        while(id<=n&&query[i].h<=numbers[id].h) add(numbers[id++].no);
        ans[query[i].no]=sum(query[i].r)-sum(query[i].l-1);
    }
    for(int i=1;i<=m;i++) cout<<ans[i]<<endl;
    return 0;
}

4🐋🐋小兔子乖乖,把门开开(钻石;单调队列)🍰

时间限制:1秒

占用内存:128M

🐟题目思路

2024年码蹄杯职业院校赛道决赛题解_哔哩哔哩_bilibili

🐟代码

#include<bits/stdc++.h> 
using namespace std;
const long long N=3e5+5;

int main( )
{
    long long n,m;
    cin>>n>>m;
    deque<long long> d;
    long long s[N],ans=-1e8;
    for(long long i=1;i<=n;i++){
        cin>>s[i];
        s[i]+=s[i-1];
    }
    d.push_back(0);
    for(long long i=1;i<=n;i++){
        if(!d.empty()&&d.front()<i-m) d.pop_front();
        ans=max(ans,s[i]-s[d.front()]);
        while(!d.empty()&&s[d.back()]>=s[i]) d.pop_back();
        d.push_back(i);
    }
    cout<<ans;
    return 0;
}

5🐋🐋魔法修路(星耀;并查集)🍰

时间限制:1秒

占用内存:256M

🐟题目思路

2024年码蹄杯本科院校赛道决赛题解_哔哩哔哩_bilibili

🐟代码

#include<bits/stdc++.h> 
using namespace std;
int ans=0;
int v[300],top;
struct edge{
    int x,y,w;
    bool operator<(const edge &b) const{
        if(w!=b.w) return w<b.w;
    }
}e[200005];
struct node{
    int f[20005];
    int a,b;
    inline int find(int x){
        return x==f[x]?x:f[x]=find(f[x]);
    }
    inline void merge(int i){
        a=find(e[i].x);
        b=find(e[i].y);
        if(a!=b) f[b]=a;
    }
}ff[540],t;
int check(node &b){
    int i,j;
    for(i=1;i<top;i++)
        if(b.find(v[i])!=b.find(v[i+1])) return 0;
    return 1;
}
int find_block(int n){
    int l=0,r=n+1,m;
    while(l+1<r){
        m=(l+r)/2;
        if(check(ff[m])) r=m;
        else l=m;
    }
    return l;
}
int f[20005];
int find(int x){
    return x==f[x]?x:f[x]=find(f[x]);
}
int main( )
{
    register int n,m,k,x,now=1,i,j,y,q,l,r,p,c,a,b,siz;
    cin>>n>>m>>q;
    for(i=1;i<=m;i++) cin>>e[i].x>>e[i].y>>e[i].w;
    sort(e+1,e+1+m);
    j=1;
    for(int i=1;i<=n;i++) f[i]=i;
    for(int i=1;i<=m;i++){
        a=find(e[i].x);
        b=find(e[i].y);
        e[j]=e[i];
        if(a!=b){
            f[b]=a;
            j++;
        }
    }
    m=j-1;
    siz=max(10,(int)(sqrt(m/3)));
    for(i=1;i<=n;i++){
        t.f[i]=i;
    }
    ff[0]=t;
    for(i=1;i<=m;i++){
        t.merge(i);
        if(i%siz==0) ff[i/siz]=t;
    }
    while(q--){
        cin>>l>>r>>p>>c;
        top=0;
        i=l/p*p+c;
        if(i<l) i+=p;
        for(;i<=r;i+=p){
            top++;
            v[top]=i;
        }
        x=find_block(m/siz);
        t=ff[x];
        for(i=x*siz+1;i<=m;i++){
            t.merge(i);
            if(check(t)){
                cout<<e[i].w<<endl;
                break;
            }
        }
        if(i>m) cout<<"error";
    }
    return 0;
}

⭐创作不易,点个赞吧~

⭐点赞收藏不迷路~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值