日期:2024年10月2日星期三 学号:S11725 姓名:孙梓洋
总分400分,拿到90分,其中第1题90分,2题0分,3题0分,4题0分
做题先后顺序:1->2->3->4 做题时间分配:共约3小时半
时间K−now与p+q比较,大于输出Yes,否则输出No。
使用scanf格式化输入时间。
计算秒数,分别存入变量now和k中。
进行判断(k-now>=p+q)即可。
定义long long变量输入时间和p,q,存入变量,进行比较。
“请问赶在达达到家之前,小可是否能准备完晚饭。”“之前”二字容易被忽视,导致判断错误。
#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;
}
n个食材,第i个食材价格为vi。 每满两个商品,可以使用最高价格购买这两件商品。 k张超市折扣券,每两件商品可以使用一张,使用最低价格购买这两件商品。 求最低花费多少钱。
使用数组输入。 使用变量存储最小值、次小值、最大值、次大值。 判断是否不是最大值也不是最小值,是则累加到sum中。 输出sum即可。
使用数组输入。
对数组进行排序。
定义双指针(结束条件l<=r)。
如果有折扣券,将a[l]累加至sum,折扣券−1,l右移,r左移(使用最低的价格买最低和最高的商品);
如果没有,将a[r]累加至sum,r左移两次(使用最高的价格买最高和次高的商品)。
如何使用活动和折扣券才能保证结果最小。
#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;
}