社区讨论

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.题目大意:

时间KnowK-nowp+qp+q比较,大于输出Yes,否则输出No

2.比赛中做当前这个题目的思路:

使用scanf格式化输入时间。 计算秒数,分别存入变量nownowkk中。 进行判断(k-now>=p+q)即可。

3.题目的正解思路:

定义long long变量输入时间和pqp,q,存入变量,进行比较。

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.题目大意:

nn个食材,第ii个食材价格为viv_i。 每满两个商品,可以使用最高价格购买这两件商品。 kk张超市折扣券,每两件商品可以使用一张,使用最低价格购买这两件商品。 求最低花费多少钱。

2.比赛中做当前这个题目的思路:

使用数组输入。 使用变量存储最小值、次小值、最大值、次大值。 判断是否不是最大值也不是最小值,是则累加到sum中。 输出sum即可。

3.题目的正解思路:

使用数组输入。 对数组进行排序。 定义双指针(结束条件l<=r)。 如果有折扣券,将a[l]累加至sum,折扣券1-1,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 条回复,欢迎继续交流。

正在加载回复...