社区讨论

CSP-X模拟赛1 (补题)

灌水区参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@m1rvjvoa
此快照首次捕获于
2024/10/02 20:59
去年
此快照最后确认于
2024/10/02 23:19
去年
查看原帖

============================================================================= 日期: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-1l右移,r左移(使用最低的价格买最低和最高的商品); 如果没有,将a[r]累加至sumr左移两次(使用最高的价格买最高和次高的商品)。
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;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...