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;
}