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#