Acwing第75场周赛

#include<bits/stdc++.h>
using namespace std;
const int N=110;
int s[N];
int main(){
    int a,b,n;
    cin>>n;
    for(int i=1;i<n;i++) {
        cin>>s[i];
        s[i]+=s[i-1];
    }
    cin>>a>>b;
    printf("%d",s[b-1]-s[a-1]);
    return 0;
}

 

#include<bits/stdc++.h>
using namespace std;
const int N=110;
int n;
struct Player{
    int id,pr;
    string name;
    bool operator<(const Player &w)const {
        if(pr==w.pr) return id<w.id;
        return pr<w.pr;
    }
}player[N];
int get_pr(string p){//由名字求优先级
    if(p=="rat") return 1;
    else if(p=="child"||p=="woman") return 2;
    else if(p=="man") return 3;
    return 4;
}
int main(){
    cin>>n;
    for(int i=0;i<n;i++){
        string name,p;
        cin>>name>>p;
        player[i]={i,get_pr(p),name};
    }
    sort(player,player+n);
    for(int i=0;i<n;i++){
        cout<<player[i].name<<endl;
    }
    return 0;
}

#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int p[N];//用于存父节点

void find(int x,int s ){
    if(p[x]==x) return ;//最后跳出条件为a[0]=0 这里相当于多一个2的根节点0
    find(p[x],x);
    p[x]=s;//让原来自己的根节点指向自己  也就是两个根节点之间的方向取反
}
int main(){
    int n,r1,r2;
    cin>>n>>r1>>r2;
    for(int i=1;i<=n;i++){
        int x;
        if(i!=r1){
            cin>>x;//一定要先判断再输入
            p[i]=x;
        }
    }
    find(p[r2],r2);//先存根节点 再存自己
    for(int i=1;i<=n;i++){
        if(i!=r2){
            cout<<p[i]<<' ';
        }
    }
    return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int N=50010,M=N*2;
int h[N],e[M],ne[M],idx;
int p[N];
int n,r1,r2;

void add(int a,int b){//存储无向边
    e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
void dfs(int u,int fa){
    p[u]=fa;
    for(int i=h[u];i!=-1;i=ne[i]){
        int j=e[i];
        if(j==fa) continue;
        dfs(j,u);
    }
}
int main(){
    cin>>n>>r1>>r2;
    memset(h,-1,sizeof h);
    for(int i=1;i<=n;i++){
        int x;
        if(i!=r1){
            cin>>x;
            add(i,x),add(x,i);
        }
    }
    dfs(r2,-1);//让根节点指向-1
    for(int i=1;i<=n;i++){
        if(i!=r2){
            cout<<p[i]<<' ';
        }
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值