CSP-X复赛模拟四——补题报告

                                                   2024.10.17

                                                     徐昱瑄

一、比赛情况

T1逃离(water):030/100  答案错误

T2晾腊肉(drying):020/100 答案错误

T3删除挑战(del):030/100 答案错误

T4手工课(manual):030/100 答案错误

总分:110     

二、赛中概况

第一个题非常的有思路,BUT在输入卡住了。。。试了好几种办法,用了近1h

然后去了第二个题,没大有思路,25min;

第三个题有思路,30min;

第四题想到了思路,但打完了发现不可行,得,重干,40~50min

三、补题报告

T1逃离(water)

题目:

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

题目分析:

进行模拟,遍历看哪一座山比导弹的高度高,输出序号

错误思路:

一个char类型二维数组,按行输入再遍历每一列,一个int数组存高度,最后看哪一个山峰能挡住子弹,输出并结束

错误代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<iomanip>
#include<string>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
using namespace std;
#define ll long long
int n,m,k;
int main(){
//	freopen("water.in","r",stdin);
//	freopen("water.out","w",stdout);
	cin>>n>>m>>k;
	char c[105][105];
	int a[105];
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>c[i][j];
		}
	}
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++){
			if(c[j][i]=='*'){
				a[i]++;
			} 
		}
	}
	for(int i=1;i<=m;i++){
		if(a[i]>=k){
			cout<<i;
			return 0;
		}
	}
	cout<<"danger";
	fclose(stdin);
	fclose(stdout);
	return 0;
}

AC思路:

其实和我的思路差不多,不过输入用getline,记录每列高度

AC代码:

#include<iostream>
using namespace std;
long long n,m,k,a[105];
string s[105];
int main(){
    cin>>n>>m>>k;
    getline(cin,s[0]);
    for(int i=1;i<=n;i++){
        getline(cin,s[i]);
        s[i]=" "+s[i];
    }
    for(int i=0;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(s[i][j]=='*'){
                a[j]++;
            }
        }
    }
    for(int i=1;i<=m;i++){
        if(a[i]>=k){
            cout<<i;
            return 0;
        }
    }
    cout<<"danger";
    return 0;
}

T2晾腊肉(drying)

题目:

小可奶奶晾晒出来的腊肉味道是一绝!
今年又到了晾晒腊肉的时候,奶奶早早开始准备。
小可的奶奶先拿出来了 个架子,然后每个架子的高度为 ,架子用来晾晒腊肉。已知,总共有 块腊肉,每块腊肉的大小为 。
腊肉会放在架子上,并且需要架子的高度 大于等于腊肉的大小 时,腊肉才不会触碰到地上。小可主动的要帮助奶奶进行腊肉和架子之间的配对,使得更多的腊肉不会触碰到地上。
求最多能有多少腊肉不会触碰到地上。

题目分析:

双指针思路&&排序

错误思路:

偏分。。。

错误代码:

​​​​​​​​​​​​​​​​​​​​#include<iostream>
#include<cstdio>
using namespace std;
int n,a[1000005],b[1000005];
int main(){
//	freopen("drying.in","r",stdin);
//	freopen("drying.out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i]>>b[i];
	}
	cout<<n-1;
	return 0;
}

 AC思路:

把所有架子和腊肉按照大小排序,小的与小的进行配对

AC代码:

#include<iostream>
#include<algorithm>
using namespace std;
long long n,cnt;
int main(){
    cin>>n;
    long long a[n+1],b[n+1],j=1;
    for(int i=1;i<=n;i++){
        cin>>a[i]>>b[i];
    }
    sort(a+1,a+n+1);//晾肉架排序
    sort(b+1,b+n+1);//腊肉排序
    for(int i=1;i<=n;i++){
        if(a[i]>=b[j]){//双指针
            cnt++;
            j++;
        }    
    }
    cout<<cnt;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值