专栏文章
CSP-J模拟赛1—总结
个人记录参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minq5scl
- 此快照首次捕获于
- 2025/12/02 06:32 3 个月前
- 此快照最后确认于
- 2025/12/02 06:32 3 个月前
CSP-J模拟赛1—总结
2025.10.1
个人感受
这次做题情况还是很不理想的,只有 分,我在做的时候的问题就是不喜欢用纸和笔去思考,就在 dev 上面一顿写,结果想到的东西老是还没打出来就忘记了,还容易把自己绕晕。
T1 我的问题就是在思考的时候想到了超过 的情况,但是没有想超过 就一次性做完再走,我的代码里面写的是超过 就让他先去隔离 天再回来继续做,浪费了鸡尾酒很多时间。
T2 的问题就是没有想到预处理,同时我的变量该赋值为 的我却赋值成了 ,导致爆 。
T3 考的是绝对值得运用,正如我开始所说,我没有在纸上面思考,没有画图,所以没有找出最优方法,而是直接暴力去枚举的。
T4 在考的时候没有什么思路,能感觉出来是要用 dp 来做,但是没有深入去思考,也就没有找到问题的方法。我这道题尝试过用贪心来做,但是错了,所以到后面就没再思考了,去继续想前面的题了。
T1 isolate 隔离
题意:
办公时间超过 分钟就会被隔离,、 两地往返时间 分钟,求完成 件事所用的最短时间。
思路:
考试的时候思路有点混乱,所以重复做了一些无意义的事。
正解:
在便利 数组时判断 是否大于或等于 ,如果是的话,肯定是一次性完成最优,先在 地把所有工作做完了再回去。
如果小于 的话,就每次判断加上新的数之后是否超过 ,超过就做处理:往返 一次时间加 。
Code:
CPP while(n){
int a;cin>>a;
if(a>=240) b=1;
s1+=a; //全加上
p+=a;
if(p>=240){ //多了
s2=s2+p+400-a;
p=a;
}
n--;
}
if(b==1){
cout<<s1;
return 0;
}
T2 sump 和积
题意:
求在 到 之间数位和为 的数的数位积最大的数的最小值。
思路:
先预处理一下,把所有数字的和与积都用数组存起来,在循环里面直接用就好了。
和与积的规律:
Code:
CPP for(int i=1; i<=9; i++) {
sum[i]=i;
cmp[i]=i;
}
for(int i=10; i<=AW-10; i++) {
sum[i]=sum[i/10]+i%10;
cmp[i]=cmp[i/10]*(i%10);
}
for(int i=M; i<=N; i++) {
if(sum[i]==k) {
if(cmp[i]>ans2) {
ans2=cmp[i];
ans1=i;
}
}
}
T3 lift 电梯停靠
题意:
有 个人要乘坐电梯,从 点到 点,求问一个点 ,使得所有点到 的距离之和最小(即为绝对值之和最小)。
思路:
先把 、 输入进去,都存进数组 ,输入完之后给 数组排序, 的最小值便是 。
证明:
首先看到绝对值这个词就应该想到数轴,我们把这些 、 点在数轴上表示出来,如图:
(此图例子:、)


由初一学过的知识来看,当点的个数为偶数个时, 取点 时总路程和最小。所以当且仅当 时,取值最小,而他又要求 的最小值,那就是 。
而通过这张图片可以看出, 的最小值为 ,
Code:
CPP for(int i=1;i<=m;i++){
cin>>a[i]>>a[m+i];
b[i]=a[i];
c[i]=a[m+i];
}
sort(a+1,a+2*m+1);
int s=a[m];
T4 select 分组选数
代码还没有调出来。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...