CSP-J第二次模拟赛补题报告-S06731

本文是CSP-J第二次模拟赛的补题报告,涉及平滑数列、字符串统计、从a到b的转换及粉刷栅栏问题。对于每个题目,作者详细介绍了问题描述、输入输出格式,并分享了个人的解题思路和代码实现,包括暴力解法和优化策略。同时,文中还讨论了部分题目的特殊情况和解决方案。
摘要由CSDN通过智能技术生成

小葵花妈妈课堂开课啦!

 老师节目换了

老师,开头节目奉上!换了,请看这里!一定要看!求求了。(点请看这里)

本次模拟赛情况,一题对3个样例,2,3题错,4题对3个样例

比赛过程中,看了1-4题,觉得第二题简单,先做了第二题,思路是用循环枚举从最小的数到最大的数,依次判断每一个数是否符合条件,我看考完了评测记录大部分都是超时,在我的预期之内,但是那几个答案错误是真的没想到,然后看了第三题,一点思路没有,留在后面做,最后蒙了个奇数次输出ok,偶数次输出no(我真是个天才),第四题属于我罕见有把握的题,但是但是只对了3组样例,6;第一题写了个算是半个暴力吧,样例过了,过了3组测试,就这样了。

第一题:(smooth.cpp/c)  平整

1.1 问题描述

小可喜欢平整的数列,做题时遇到数列就会去研究一下是否平整。

平整的含义为:对于数列中的所有数字 a​i​​ ,会存在至少一个数字 x,满足x−a​i​​∣≤1。

请聪明的你帮助小可计算一下,对于给定的数列,存在多少 x 满足题意。

1.2 输入格式

第一行一个数字 T ,表示多组输入。

对于每组数据,第一行输入一个整数 N,表示数列长度,第二行输入 N 个数字,表示一个数列。

1.3 输出格式

对于每组数据,输出一行,表示有多少满足条件的 x。

这题我看了没啥思路,我推不出来,只好打了个暴力,得了30分

推理:

这一道题是推规律的题,我们举几个例子

1、1 2 3 4 5 6,这个式子找不到一个x满足

2、1 2 1 2 1 2 1,这个式子有两个x可以满足,分别是1和2

3、1 2 3 3 2 1,这个式子有一个x可以满足,是2

4、1 1 1 1 1 1 ,这个式子有三个x可以满足,是0,2,1

得出规律:用数列的最大值和最小值减出来就是答案,当差的绝对值为0时,有3种可能;当差的绝对值为1时,有2种可能;当差的绝对值为2时,有1种可能;

综合上,代码实现如下

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve(){
ll n;
cin>>n;
ll a[n];
for(ll i=0;i<n;i++) cin>>a[i];
sort(a,a+n);
ll delta=a[n-1]-a[0];
if(delta>2){
cout<<"0\n";
return;
}
if(delta==2){
cout<<"1\n";
return;
}
if(delta==1){
cout<<"2\n";
return ;
}
if(!delta){
cout<<"3\n";
return ;
}
}
signed main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值