20230723小红书笔试代码分享
感觉比春招实习笔试简单多了,但是为啥我当时笔试ak后一面也没有
第一题
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main()
{
ll n,k;
cin>>n>>k;
ll ans=k*(1+n)*n/2;
cout<<ans;
return 0;
}
第二题排序后双指针或者二分都行
#include<bits/stdc++.h>
using namespace std;
struct seg
{
int l,r;
bool operator < (const seg& b) const
{
if(l==b.l)
return r<b.r;
return l<b.l;
}
};
vector<seg> a;
int n,m,k;
int main()
{
scanf("%d%d%d",&n,&m,&k);
a.resize(m);
for(int i=0;i<m;i++)
scanf("%d%d",&a[i].l,&a[i].r);
sort(a.begin(),a.end());
int now=0,ans=0,id=0,r=0;
for(int i=0;i<a.size();i++)
{
r=a[i].l+k;
while(id<a.size() && r>a[id].r)
{
now+=a[id].r-a[id].l;
id++;
}
int tmp=now;
if(id<a.size() && r>=a[id].l)
tmp+=r-a[id].l;
ans=max(ans,tmp);
if(id>i)
now-=a[i].r-a[i].l;
}
printf("%d",ans);
return 0;
}
第三题 3月的还要写个线段树,这次大水题
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int maxl=2e5+10;
int n,x;ll ans=0;
int a[maxl];
ll pre[maxl],suf[maxl];
inline void solv()
{
ans=0;
scanf("%d%d",&n,&x);
ans=x;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
pre[i]=max(pre[i-1]+a[i],1ll*a[i]);
}
a[n+1]=suf[n+1]=0;
for(int i=n;i>=1;i--)
{
suf[i]=max(suf[i+1]+a[i],1ll*a[i]);
ans=max(ans,suf[i]+pre[i]-a[i]);
ans=max(ans,x+suf[i]+pre[i]-a[i]-a[i]);
}
printf("%lld\n",ans);
}
int main()
{
int t;
scanf("%d",&t);
for(int i=1;i<=t;i++)
{
solv();
}
return 0;
}
#小红书##秋招##笔试##小红书2024#
查看12道真题和解析
