CSP-X模拟题四补题报告 日期2024.10.17 学号:S12750

一.

1.逃离(water)

2.晾腊肉(drying)

3.删除挑战(del)

4.手工课(manual)

二.解题报告

一.逃离(water)

1.题目大意

小可逃离战争封锁地的过程中,邪恶军团又发射了导弹袭击!
好在小可身处群山之中,群山的山峰可以在一定程度上抵挡导弹的攻击。
小可提前知道了导弹的高度和山峰的侧视高度图,小可想知道导弹会命中哪座山峰。如果导弹会袭击到小可输出 danger 。
注意:从左到右第一个大于等于导弹高度的山峰会被命中。

2.思路

给你导弹高度,如果导弹能命中山峰,那么输出山峰的编号(最左边的山峰编号为 ),否则输出 danger (因为cin和scanf不能读入空格,所以用getline)。

3.代码

#include<bits/stdc++.h> 
using namespace std;
string s;
int b[105];
int main(){
    freopen("water.in","r",stdin);
    freopen("water.out","w",stdout);
    int n,m,k;
    cin>>n>>m>>k;
    getchar();
    for(int i=1;i<=n;i++){
        getline(cin,s);
        for(int j=0;j<=s.size();j++){
            if(s[j]=="*")    b[j+1]++;
        }
    }
    for(int i=1;i<=m;i++){
        if(b[i]>=k){
            cout<<i;
            return 0;
        }
    }
    cout<<"danger";
    return 0;
}

二.晾腊肉(drying)

1.题目大意

n个架子,然后每个架子的高度为ai。腊肉会放在架子上,并且需要架子的高度ai大于等于腊肉的大小bi时,腊肉才不会触碰到地上。

2.思路

输入腊肉和架子数量,把架子排好顺序,和腊肉比较。

3.代码

#include<bits/stdc++.h> 
using namespace std;
int a[1000005],b[1000005];
int main(){
    //freopen("drying.in","r",stdin);
    //freopen("drying.out","w",stdout);
    int n,cnt=0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d%d",&a[i],b+i);
    }
    sort(a+1,a+n+1);
    sort(b+1,b+n+1);
    int i=1,j=1;
    while(i<=n){
        if(a[i]>=b[j]){
            j++,i++,cnt++;
        }
        else i++;
    }
    printf("%d",cnt);
    return 0;
}

三.删除挑战(del)

1.题目大意

有一个长度为n的序列a,小可要删除其中k个数字。

2.思路

循环k次,删除结尾和开头中最小的元素,最后累加并输出。

3.代码

#include<bits/stdc++.h> 
using namespace std;
int n,a[5005],k;
long long s[5005];
int main(){
    //freopen("del.in","r",stdin);
    //freopen("del.out","w",stdout);
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        cin>>a[i],s[i]=s[i-1]+a[i];
    }
    k=n-k;
    long long ans=0,t;
    for(int i=k;i<=n;i++){
        t=s[i]-s[i-k];
        ans=max(ans,t);
    }
    cout<<ans;
    return 0;
}

四.

1.题目大意

在手工课开始前,达达老师就为同学们准备了n根长度均为u的手工材料。
班级里共有k位同学,每位同学也同样准备了手工材料,已知,第i同学准备的材料长度为a[i] 。手工作品最终完成后,要送给m位受人尊敬的老师,每位老师需要的手工作品高度需要是b[i]。

3.代码

#include<bits/stdc++.h> 
using namespace std;
const int N=1e5+10;
int u,k,n,m,a[2*N],b[N];
long long sum;
int main(){
    //freopen("del.in","r",stdin);
    //freopen("del.out","w",stdout);
    cin>>n>>u>>k>>m;
    for(int i=1;i<=k;i++){
        cin>>a[i];
    }
    for(int i=1;i<=m;i++){
        cin>>b[i];
    }
    for(int i=1;i<=n;i++){
        a[++k]=u;
    }
    sort(a+1,a+1+k);
    sort(b+1,b+1+m);
    int i=1,j=1;
    while(b[j]==0&&j<=m)    j++;
    while(i<=k&&j<=m){
        if(b[j]<=a[i]){
            sum+=a[i];
            j++,i++; 
        }else{
            i++;
        } 
    }
    if(j<=m){
        cout<<"No";
    }else{
        cout<<"Yes"<<endl<<sum;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值