2023.9.24 网易游戏雷火 笔试

T1:

求MVP和获胜团队。

思路:

模拟题,开一个mp记录一下每一个球员的信息,统计完毕以后输出结果即可。

AC

#include<bits/stdc++.h>
using namespace std;
const int N=2e6+10;
#define int long long
typedef pair<int,int>PII;
int n;
void solve()
{
	cin>>n;
	string t1,t2;
	cin>>t1>>t2;
	map<string,pair<int,int>>mp;
	set<string>st;
	int sum1=0,sum2=0;
	for(int i=1;i<=n;i++)
	{
		string name;
		cin>>name;
		string t;
		cin>>t;
		int val;cin>>val;
		if(t==t1)sum1+=val;
		else sum2+=val;
		mp[name].first+=val;
		mp[name].second=i;
		st.insert(name);
	}
	if(sum1==sum2)cout<<"ended in a draw"<<endl;
	else if(sum1>sum2)cout<<"TeamA"<<endl;
	else cout<<"TeamB"<<endl;
	string maxv_name;
	int maxv_val=0;
	int maxv_t=0x3f3f3f3f;
	for(auto c:st)
	{
		if(mp[c].first>maxv_val)
		{
			maxv_name=c;
			maxv_val=mp[c].first;
			maxv_t=mp[c].second;
		}else if(mp[c].first==maxv_val&&mp[c].second<maxv_t)
		{
			maxv_name=c;
			maxv_val=mp[c].first;
			maxv_t=mp[c].second;
		}
	}
	cout<<maxv_name<<endl;
}
signed main()
{
	freopen("test.in","r",stdin);
	solve();
	return 0;
}

T2:

给定若干名玩家的位置和状态信息以及草丛的位置信息和大小,要求判断是否能够相互看到。

思路:

判断是否在草丛:对于圆形,判断圆心距离即可。对于矩形,判断 $x$和$y$,相对于矩形的 最大,最小边界即可。

剩下的就是判断两者的状态的一些逻辑。

AC

#include<bits/stdc++.h>
using namespace std;
const int N=2e6+10;
typedef pair<int,int>PII;
int n;
struct node{
	double x,y;
	int b,c;
};
struct cir{
	double x,y,r;
};
struct tra{
	double x1,y1,x2,y2,x3,y3,x4,y4;
};
bool check1(cir a,node player)
{
return (a.x-player.x)*(a.x-player.x) + (a.y-player.y)* (a.y-player.y) -  (a.r)*(a.r)<=0;
}
bool check2(tra a,node player)
{
	bool flag=true;
	double minv_x=min({a.x1,a.x2,a.x3,a.x4});
	double maxv_x=max({a.x1,a.x2,a.x3,a.x4});
	if(player.x<minv_x||player.x>maxv_x)flag=false;
	double minv_y=min({a.y1,a.y2,a.y3,a.y4});
	double maxv_y=max({a.y1,a.y2,a.y3,a.y4});
	if(player.y<minv_y||player.y>maxv_y)flag=false;
	return flag;
}
void solve()
{
	int n,m,q;
	cin>>n>>m>>q;
	vector<node>player(n+1);
	for(int i=1;i<=n;i++)
	{
		double x,y;
		int b,c;
		cin>>x>>y>>b>>c;
		player[i]={x,y,b,c};
	}
	vector<cir>a;
	vector<tra>b;
	for(int i=1;i<=m;i++)
	{
		int type;cin>>type;
		if(type==0)
		{
			double x,y,r;
			cin>>x>>y>>r;
			a.push_back({x,y,r});
		}else
		{
			tra tmp;
			for(int k=1;k<=4;k++)
			{
				double x,y;
				cin>>x>>y;
				if(k==1)tmp.x1=x,tmp.y1=y;
				else if(k==2)tmp.x2=x,tmp.y2=y;
				else if(k==3)tmp.x3=x,tmp.y3=y;
				else tmp.x4=x,tmp.y4=y;
			}
			b.push_back(tmp);
		}
	}
	for(int i=1;i<=q;i++)
	{
		int q1,q2;
		cin>>q1>>q2;
		
		if(player[q2].b)
		{
			cout<<0<<endl;
            continue;
		}else if(player[q1].c==player[q2].c)
		{
			cout<<1<<endl;
			continue;
		}else
		{
			bool flag=false;
			for(auto c:a)
			 if(check1(c,player[q1])&&check1(c,player[q2]))flag=true;
			
			for(auto c:b)
			 if(check2(c,player[q1])&&check2(c,player[q2]))flag=true;
			 
			if(flag)
			{
				cout<<1<<endl;
				continue;
			}
		    flag=false;
		    for(auto c:a)flag|=check1(c,player[q2]);
		    for(auto c:b)flag|=check2(c,player[q2]);
		    if(flag)cout<<0<<endl;
		    else cout<<1<<endl;
		}	
	}
	return ;
}
signed main()
{
	//freopen("test.in","r",stdin);
	solve();
	return 0;
}

T3:

给定若干药的属性和价值,求一种特定药的最小花费。

背包求具体方案。这题不会,感觉可能有更好的转移方程吧。

过0.4

#include<bits/stdc++.h>
using namespace std;
const int N=2e6+10;
typedef pair<int,int>PII;
int n,k,x,y;
struct node{
	int v,b,c;
};
int dp[201][6][25000][2];
void solve()
{
	cin>>n>>k>>x>>y;
	vector<node>a(n+1);
	for(int i=1;i<=n;i++)cin>>a[i].v>>a[i].b>>a[i].c;
	for(int i=1;i<=n;i++)a[i].b--;
    x--;
	memset(dp,0x3f3f3f3f,sizeof dp);
	for(int i=1;i<=k;i++)
	{
		dp[1][i][a[1].c][a[1].b]=a[1].v;
	}
	for(int i=1;i<=n;i++)
	 for(int j=1;j<=k;j++)dp[i][j][0][0]=dp[i][j][0][1]=0;
	 
	for(int i=2;i<=n;i++)
	{
		int v=a[i].v,id=a[i].b,val=a[i].c;
		for(int j=1;j<=k;j++)
		{	
			for(int l=1;l<=20000;l++)
			{
				dp[i][j][l][0]=min(dp[i][j][l][0],dp[i-1][j][l][0]);
				dp[i][j][l][1]=min(dp[i][j][l][1],dp[i-1][j][l][1]);
                dp[i][j][l][0]=min(dp[i][j][l][0],dp[i][j-1][l][0]);
				dp[i][j][l][1]=min(dp[i][j][l][1],dp[i][j-1][l][1]);
				if(id==0)
				{
					if(l-val>=0)dp[i][j][l][0]=min(dp[i][j][l][0],dp[i-1][j-1][l-val][0]+v);
					if(val-l>=0)dp[i][j][l][0]=min(dp[i][j][l][0],dp[i-1][j-1][val-l][1]+v);
					dp[i][j][l][1]=min(dp[i][j][l][1],dp[i-1][j-1][l+val][1]+v);
					
				}else
				{
					dp[i][j][l][0]=min(dp[i][j][l][0],dp[i-1][j-1][l+val][0]+v);
					if(l-val>=0)dp[i][j][l][1]=min(dp[i][j][l][1],dp[i-1][j-1][l-val][1]+v);
					if(val-l>=0)dp[i][j][l][1]=min(dp[i][j][l][1],dp[i-1][j-1][val-l][0]+v);
				}
			}
		}
	}
	int ans=0x3f3f3f3f;
	for(int i=1;i<=k;i++)ans=min(ans,dp[n][i][y][x]);
	if(ans!=0x3f3f3f3f)cout<<ans<<endl;
	else cout<<"Cannot Maker It!"<<endl;
	return ;
}
signed main()
{
	//freopen("test.in","r",stdin);
	solve();
	return 0;
}

T4:

没看

#网易##笔试#
全部评论

相关推荐

评论
点赞
6
分享

创作者周榜

更多
牛客网
牛客企业服务