美团8.15笔试部分题解

美团8.15笔试
1.1-n排列
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,m,k;
string solve()
{
	cin >> n;
	map<int,int> mp;
	for(int i=0;i<n;i++)
	{
		cin >> k;
		mp[k] = 1;
	}
	for(int i=1;i<=n;i++)
	{
		if(mp[i]==0) return "No";
	}
	return "Yes";
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	int T = 1;
	cin >> T;
	while(T--) cout << solve() << "\n";
}

2.字符串
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,m,k;
string s;
bool c(int x)
{
	for(int i=x;i<n;i++)
	{
		if(s[i]!=s[n-i+x-1]) return 0;
		if(i>=n-i+x-1) break;
	}
	return 1;
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> s;
	n = s.size();
	for(int i=0;i<n;i++)
	{
		if(s[i]==s[n-1])
		{
			if(c(i)) 
			{
				cout << i << "\n";
				return 0;
			}
		}
	}
}

3.机器人
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,m,k;
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n;
	vector<pair<int,int>> a(n);
	for(int i=0;i<n;i++)
	{
		string st;
		cin >> k >> st;
		if(st=="L") m = 0;
		else m = 1;
		a[i] = {k,m};
	}
	stack<pair<int,int>> sou,sji;
	vector<int> o(n);
	for(int i=0;i<n;i++) o[i] = i;
	sort(o.begin(),o.end(),[&](int x,int y)
	{
		return a[x]<a[y];
	});
	vector<int> ans(n,0);
	for(int i=0;i<n;i++)
	{
		int j = o[i];
		if(a[j].second==0)
		{
			if(a[j].first%2==0)
			{
				if(sou.empty()) ans[j] = -1;
				else{
					auto x = sou.top();
					sou.pop();
					ans[x.second] = ans[j] = (a[j].first-x.first)/2;
				}
			}
			else{
				if(sji.empty()) ans[j] = -1;
				else{
					auto x = sji.top();
					sji.pop();
					ans[x.second] = ans[j] = (a[j].first-x.first)/2;
				}
			}
			
		}
		else{
			if(a[j].first%2==0)
			sou.push({a[j].first,j});
			else
			sji.push({a[j].first,j});
		}
	}
	while(!sou.empty())
	{
		auto x = sou.top();sou.pop();
		ans[x.second] = -1;
	}
	while(!sji.empty())
	{
		auto x = sji.top();sji.pop();
		ans[x.second] = -1;
	}
	for(auto& i:ans) cout << i << "\n";
}

4打车,只过了72%,求大佬指点
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,m,k,x,y,p,q;
vector<pair<ll,ll>> g1[55],g2[55];
vector<ll> dis1(55,1e18),dis2(55,1e18);
void dijkstra1()
{
	priority_queue<pair<ll,ll>> q;
	vector<int> vis(55,0);
	q.push({0,y});
	dis1[y] = 0;
	while(!q.empty())
	{
		auto now = q.top();
		q.pop();
		int u = now.second;
		if(vis[u]) continue;
		vis[u] = 1;
		for(int i=0;i<g1[u].size();i++)
		{
			ll v = g1[u][i].first,w = g1[u][i].second;
			if(dis1[v]>dis1[u]+w)
			{
				dis1[v] = dis1[u]+w;
				q.push({-dis1[v],v});
			}
		}
	}
}
void dijkstra2()
{
	priority_queue<pair<ll,ll>> q;
	vector<int> vis(55,0);
	q.push({0,x});
	dis2[x] = 0;
	while(!q.empty())
	{
		auto now = q.top();
		q.pop();
		int u = now.second;
		if(vis[u]) continue;
		vis[u] = 1;
		for(int i=0;i<g2[u].size();i++)
		{
			ll v = g2[u][i].first,w = g2[u][i].second;
			if(dis2[v]>dis2[u]+w)
			{
				dis2[v] = dis2[u]+w;
				q.push({-dis2[v],v});
			}
		}
	}
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n >> m >> x >> y;
	for(int i=0;i<m;i++)
	{
		int u,v;
		cin >> u >> v >> p >> q;
		g1[u].push_back({v,p});
		g1[v].push_back({u,p});
		g2[u].push_back({v,q});
		g2[v].push_back({u,q});
	}
	dijkstra1();
	dijkstra2();
	ll ans = 1e18;
	for(int i=1;i<=n;i++)
	{
		ll z;
		cin >> z;
		ans = min(ans,max(z,dis2[i])+dis1[i]);
	}
	//for(int i=1;i<=n;i++) cout << dis1[i] << " ";cout << "\n";
	//for(int i=1;i<=n;i++) cout << dis2[i] << " ";cout << "\n";
	cout << min(ans,dis2[y]) << "\n";
}

5.不踩坑
#include<bits/stdc++.h>
using namespace std;
vector<int> dp(10009,1e9);
int main()
{
	int n,p;
	cin >> n >> p;
	string s;
	cin >> s;
	vector<int> a(p+1,0);
	for(int i=1;i<=p;i++) cin >> a[i];
	dp[1] = 0;
	for(int i=2;i<=n;i++)
	{
		if(s[i-1]=='x') continue;
		for(int j=1;j<=p&&i-j>=1;j++)
		{
			dp[i] = min(dp[i],dp[i-j]+a[j]);
		}
	}
	cout << dp[n] << "\n";
}


#美团笔试##美团##笔经#
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-02 10:46
点赞 评论 收藏
分享
0offer底层废物双飞牛马:这找不到我就只有原地去世了
点赞 评论 收藏
分享
3 1 评论
分享
牛客网
牛客企业服务