社区讨论
CSP-X模拟赛1 (补题)
灌水区参与者 16已保存回复 16
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 16 条
- 当前快照
- 1 份
- 快照标识符
- @m1slaef6
- 此快照首次捕获于
- 2024/10/03 09:00 去年
- 此快照最后确认于
- 2025/11/05 00:04 4 个月前
日期:2024年10月2日星期三
学号:S11725
姓名:孙梓洋
一.比赛概况:
总分400分,拿到90分,其中第1题90分,2题0分,3题0分,4题0分
二、比赛过程:
做题先后顺序:1->2->3->4
做题时间分配:共约3小时半
三、解题报告:
题目一:cook
1.题目大意:
时间与比较,大于输出
Yes,否则输出No。2.比赛中做当前这个题目的思路:
使用
scanf格式化输入时间。
计算秒数,分别存入变量和中。
进行判断(k-now>=p+q)即可。3.题目的正解思路:
定义
long long变量输入时间和,存入变量,进行比较。4.题目中的易错点:
“请问赶在达达到家之前,小可是否能准备完晚饭。”“之前”二字容易被忽视,导致判断错误。
5.AC代码:
CPP#include<bits/stdc++.h>
using namespace std;
long long h1, m1, s1, h2, m2, s2, t, x, y;
int main(){
scanf("%lld:%lld:%lld", &h1, &m1, &s1);
scanf("%lld:%lld:%lld", &h2, &m2, &s2);
scanf("%lld%lld", &x, &y); // 统一转换单位为秒,计算时间
// t>x+y说明能在时刻K之前完成
t = (h2 * 3600 + m2 * 60 + s2) - (h1 * 3600 + m1 * 60 + s1);
if (t > x + y){
cout << "Yes";
}else{
cout << "No";
}
cout<<min;
return 0;
}
题目三:buy
1.题目大意:
个食材,第个食材价格为。
每满两个商品,可以使用最高价格购买这两件商品。
张超市折扣券,每两件商品可以使用一张,使用最低价格购买这两件商品。
求最低花费多少钱。
2.比赛中做当前这个题目的思路:
使用数组输入。
使用变量存储最小值、次小值、最大值、次大值。
判断是否不是最大值也不是最小值,是则累加到sum中。
输出sum即可。
3.题目的正解思路:
使用数组输入。
对数组进行排序。
定义双指针(结束条件
l<=r)。
如果有折扣券,将a[l]累加至sum,折扣券,l右移,r左移(使用最低的价格买最低和最高的商品);
如果没有,将a[r]累加至sum,r左移两次(使用最高的价格买最高和次高的商品)。4.题目中的易错点:
如何使用活动和折扣券才能保证结果最小。
5.AC代码:
CPP#include<bits/stdc++.h>
using namespace std;
long long n,k,a[1000010],ans;
int main(){
scanf("%d %d", &n, &k);
for (int i = 1; i <= n; i++){
scanf("%d", &a[i]);
}
sort(a + 1, a + n + 1);
// l指向最小值,r指向最大值,l>r时表示全部清空,结束循环
int l=1,r=n;
while ( l <= r) {
if (k > 0){//有卷
ans += a[l];
l++, r--, k--;
}else{ //无折扣券,最大和次大绑定,加最大值,同时最大值右移两位
ans += a[r];
r -= 2;
}
}
cout << ans;
return 0;
}
回复
共 16 条回复,欢迎继续交流。
正在加载回复...