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; }#字节笔试##互联网校招全国统一模拟笔试##秋招#