2022-07-23 字节七月模拟笔试 71 分
- 20’ 19:17 100%
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int main(){
int m,n,p=0,t=0;
int d,j;
vector<vector<int>> b;
cin>>m>>n;
for(int i=0;i<n;i++){
cin>>d>>j;
b.push_back({d,j});
}
d=0;
while(d<m){
while(t<n&&b[d][1]<=b[t][1])
t++;
// cout<<"t= "<<t<<", d= "<<d<<"\n";
if(t==n){
p+=(m-d)*b[d][1];
break;
}
p+=(b[t][0]-b[d][0])*b[d][1];
// cout<<"p= "<<p<<"\n";
d=b[t][0];
}
cout<<p;
return 0;
}- 25’ 19:36 80%
// 本题为考试多行输入输出规范示例,无需提交,不计分。
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
int d[4][2]={{-2,-2},{-2,2},{2,-2},{2,2}};
int yan[4][2]={{-1,-1},{-1,1},{1,-1},{1,1}};
int main(){
int n,m;
cin>>n>>m;
vector<vector<int>> q(n+1,vector<int>(m+1,0));
int k;cin>>k;
for(int i=0,a,b;i<k;i++){
cin>>a>>b;
q[a][b]=1;
}
int x0,y0,xt,yt;
cin>>x0>>y0>>xt>>yt;
queue<vector<int>> qu;
qu.push({x0,y0});
int bu=0;
while(!qu.empty()){
queue<vector<int>> back;
bu++;
while(!qu.empty()){
vector<int> p=qu.front();
qu.pop();
for(int i=0;i<4;i++){
int nx=p[0]+yan[i][0],ny=p[1]+yan[i][1];
if(nx>0&&nx<=n&&ny>0&&ny<=m&&q[nx][ny]!=1){
nx=p[0]+d[i][0],ny=p[1]+d[i][1];
if(nx>0&&nx<=n&&ny>0&&ny<=m&&q[nx][ny]==0){
if(nx==xt&&ny==yt){
cout<< bu;
return 0;
}
q[nx][ny]=2;
back.push({nx,ny});
}
}
}
}
qu=back;
}
cout<<-1;
return 0;
}- 25‘ 19:48 100%
// 本题为考试多行输入输出规范示例,无需提交,不计分。
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
#define C cin>>
#define p pair<int,int>
int main(){
int n;C n;
vector<p> x(n);
for(int i=0;i<n;++i){
C x[i].first;
C x[i].second;
}
vector<int> dp(n,0);
dp[n-1]=x[n-1].first;
for(int i=n-2;i>=0;i--){
int d=x[i].second, t=0;
if(i+d+1<n){
t=dp[i+d+1];
}
dp[i]=max(dp[i+1],x[i].first+t);
}
cout<<dp[0];
return 0;
}- 30‘ 20:53 20%
// 本题为考试多行输入输出规范示例,无需提交,不计分。
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
#define C cin>>
#define ull unsigned long long
#define _f(i,a,b) for(int i=a;i<b;i++)
int m=0, n=0, t;
inline int dis(int x, int y){
return min(abs(y-x), m-abs(x-y));
}
// int main(){
// C n;
// C m;
// vector<int> p(m);
// _f(i,0,n){
// C t;
// p[t-1]=1;
// }
// vector<int> pre(m+1,0);
// _f(i,1,m+1)
// pre[i]=pre[i-1]+p[i-1];
// vector<ull> posCnt(m+1,0); // 前 i 个人的位置的前缀和
// _f(i,1,m+1)
// posCnt[i] = p[i-1]==1 ? posCnt[i-1]+i-1 : posCnt[i-1];
// ull minD=0x0fffffffffff;
// _f(from,0,m){
// int to = (from+n-1)%m;
// int c = to>=from? pre[to+1]-pre[from] : n - pre[from] + pre[to+1]; // 人数
// int thisAns=0;
// if(from<=to){
// ull leftC=0,rightC=0,midC=0;
// // left = pre[from]*(from-1) - posCnt[from];
// // right = posCnt[m] - posCnt[m+1] - (n-pre[to+1])*(to+1);
// int mid=(to+(m-n)/2)%m; // 不一定都是从中间划开...
// if(mid>to){
// leftC = posCnt[mid+1]-posCnt[to+1]-(ull)(pre[mid+1]-pre[to+1])*(to+1);
// rightC = ...
// }else{
// }
// }else{
// }
// }
// cout<<1;
// return 0;
// }
int main(){
C n;
C m;
vector<int> p(m);
_f(i,0,n){
C t;
p[t-1]=1;
}
vector<int> pre(m+1,0);
_f(i,1,m+1)
pre[i]=pre[i-1]+p[i-1];
vector<ull> posCnt(m+1,0); // 前 i 个人的位置的前缀和
_f(i,1,m+1)
posCnt[i] = p[i-1]==1 ? posCnt[i-1]+i-1 : posCnt[i-1];
ull minD=0;
// deque<int> qian,hou;
// for(int i=n;i<m;i++)
// if(p[i]==1)
// hou.push_back(i);
_f(from,0,m){
ull minD_=0;
int to = (from+n-1)%m;
int c = to>=from? pre[to+1]-pre[from] : n - pre[from] + pre[to+1]; // 人数
deque<int> q;
for(int i=0;i<n;i++){
t = (from+i)%m;
if(p[t]==0)
q.push_back(t);
}
deque<int> wai;
if(from<to){
for(int i=from-1;i>=0;i--)
if(p[i]==1)
wai.push_back(i);
for(int i=m-1;i>to;i--)
if(p[i]==1)
wai.push_back(i);
while(!wai.empty()){
int xh1=q.front(),xh2=q.back();
int yh1=wai.front(),yh2=wai.back();
int d11=dis(xh1,yh1),d12=dis(xh1,yh2),d21=dis(xh2,yh1),d22=dis(xh2,yh2);
int mind=min(min(d11,d12),min(d21,d22));
minD_+=mind;
if(mind==d11){
q.pop_front();
wai.pop_front();
}else if(mind==d12){
q.pop_front();
wai.pop_back();
}else if(mind==d21){
q.pop_back();
wai.pop_front();
}else{
q.pop_back();
wai.pop_back();
}
}
}
else{
for(int i=to+1;i<from;i++)
if(p[i]==1)
wai.push_back(i);
while(!wai.empty()){
int xh1=q.front(),xh2=q.back();
int yh1=wai.front(),yh2=wai.back();
int d11=dis(xh1,yh1),d12=dis(xh1,yh2),d21=dis(xh2,yh1),d22=dis(xh2,yh2);
int mind=min(min(d11,d12),min(d21,d22));
minD_+=mind;
if(mind==d11){
q.pop_front();
wai.pop_front();
}else if(mind==d12){
q.pop_front();
wai.pop_back();
}else if(mind==d21){
q.pop_back();
wai.pop_front();
}else{
q.pop_back();
wai.pop_back();
}
}
}
minD=min(minD,minD_);
}
cout<<minD;
return 0;
}#字节笔试##互联网校招全国统一模拟笔试##秋招#
查看12道真题和解析
腾讯云智研发成长空间 216人发布