首页 > 美团笔试 0829
头像
一缕迷失的光
编辑于 2020-08-29 19:00
+ 关注

美团笔试 0829

/*
小团复制粘贴
时间限制: 1000MS
内存限制: 65536KB
题目描述:
小团是一个莫得感情的CtrlCV大师,他有一个下标从1开始的序列A和一个初始全部为-1的序列B,两个序列的长度都是n。他会进行若干次操作,每一次操作,他都会选择A序列中一段连续区间,将其粘贴到B序列中的某一个连续的位置,在这个过程中他也会查询B序列中某一个位置上的值。

我们用如下的方式表示他的粘贴操作和查询操作:

粘贴操作:1  k x y,表示把A序列中从下标x位置开始的连续k个元素粘贴到B序列中从下标y开始的连续k个位置上,原始序列中对应的元素被覆盖。(数据保证不会出现粘贴后k个元素超出B序列原有长度的情况)

查询操作:2 x,表示询问当前B序列下标x处的值是多少。



输入描述
输入第一行包含一个正整数n,表示序列A和序列B的长度。(1<=n<=2000)

输入第二行包含n个正整数,表示序列A中的n个元素,第 i 个数字表示下标为 i 的位置上的元素,每一个元素保证在10^9以内。

输入第三行是一个操作数m,表示进行的操作数量。(1<=m<=2000)

接下来m行,每行第一个数字为1或2,具体操作细节详见题面。

输出描述
对于每一个操作2输出一行,每行仅包含一个整数,表示针对某一个询问的答案。

*/
#include<iostream> #include<string> #include<cmath> #include<vector> #include<algorithm> using namespace std; void mcopy(vector<int> &A,vector<int> &B,int k,int x,int y) { int i,j; for(i=x,j=y;i<x+k;i++,j++) { B[j]=A[i]; } } int main() { int n,m; int i; vector<int> A,B; cin>>n; for(i=0;i<n;i++) { int t; cin>>t; A.push_back(t); B.push_back(-1); } cin>>m; for(i=0;i<m;i++) { int t1; cin>>t1; if(t1==2) { int t2; cin>>t2; cout<<B[t2-1]<<endl; } if(t1==1) { int k,x,y; cin>>k>>x>>y; mcopy(A,B,k,x-1,y-1); } } return 0; } /* 小团深谙保密工作的重要性,因此在某些明文的传输中会使用一种加密策略,小团如果需要传输一个字符串S,则他会为这个字符串添加一个头部字符串和一个尾部字符串。头部字符串满足至少包含一个“MT”子序列,且以T结尾。尾部字符串需要满足至少包含一个“MT”子序列,且以M开头。例如AAAMT和MAAAT都是一个合法的头部字符串,而MTAAA就不是合法的头部字符串。很显然这样的头尾字符串并不一定是唯一的,因此我们还有一个约束,就是S是满足头尾字符串合法的情况下的最长的字符串。 很显然这样的加密策略是支持解码的,给出你一个加密后的字符串,请你找出中间被加密的字符串S。 输入描述 输入第一行是一个正整数n,表示加密后的字符串总长度。(1<=n<=100000) 输入第二行是一个长度为n的仅由大写字母组成的字符串T。 输出描述 输出仅包含一个字符串S。 1. #include<iostream> #include<string> #include<cmath> #include<vector> #include<algorithm> using namespace std; int main() { int n,i,l=0,r=0,f1=0,f2=0; string t; cin>>n; cin>>t; for(i=0;i<n;i++) { if(t[i]=='M') { f1=1; } if(t[i]=='T' && f1==1) { l=i+1; break; } } for(i=n-1;i>0;i--) { if(t[i]=='T') { f2=1; } if(t[i]=='M' && f2==1) { r=i-1; break; } } //cout<<l<<r<<endl; if(l>r && r!=0) { for(i=0;i<=r;i++) { cout<<t[i]; } } else if(l<r) { for(i=l;i<=r;i++) { cout<<t[i]; } } cout<<endl; return 0; } 2.小团的选调计划 时间限制: 1000MS 内存限制: 65536KB 题目描述: 美团打算选调n名业务骨干到n个不同的业务区域,本着能者优先的原则,公司将这n个人按照业务能力从高到底编号为1~n。编号靠前的人具有优先选择的权力,每一个人都会填写一个意向,这个意向是一个1~n的排列,表示一个人希望的去的业务区域顺序,如果有两个人同时希望去某一个业务区域则优先满足编号小的人,每个人最终只能去一个业务区域。 例如3个人的意向顺序都是1 2 3,则第一个人去1号区域,第二个人由于1号区域被选择了,所以只能选择2号区域,同理第三个人只能选择3号区域。 最终请你输出每个人最终去的区域。 输入描述 输入第一行是一个正整数n,表示业务骨干和业务区域数量。(n≤300) 接下来有n行,每行n个整数,即一个1~n的排列,第 i 行表示 i-1 号业务骨干的意向顺序。 输出描述 输出包含n个正整数,第 i 个正整数表示第 i 号业务骨干最终去的业务区域编号 #include<iostream> #include<string> #include<cmath> #include<vector> #include<algorithm> using namespace std; int is_exit(int a[],int n,int e) { int i; for(i=0;i<n;i++) { if(a[i]==e) { return 1;//存在 } } return 0;//不存在 } int main() { int n,i,j,t,len=0; int a[301],b[301][301]; cin>>n; for(i=0;i<n;i++) { for(j=0;j<n;j++) { cin>>t; b[i][j]=t; } for(j=0;j<n;j++) { if(is_exit(a,len,b[i][j])==0) { a[len++]=b[i][j]; break; } } } for(i=0;i<n;i++) { cout<<a[i]<<" "; } cout<<endl; return 0; }

全部评论

(2) 回帖
加载中...
话题 回帖

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐