一道大模拟题。
这道题可以用一个 map
记录球员及鬼飞球当时的坐标, 用一个数组 a
记录是否有人进球,用另一个数组 b
记录每位球员是否有鬼飞球。
当球员抓住鬼飞球后,鬼飞球跟着这个球员移动,直到这个球员投球。
话不多说,直接上代码。
My Code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,t;
string a[110][110],s;
struct node{
int x,y;
};
map<string,node> mp; // 表示位置
short c[10010]; // c[i]=1 表示 第i秒R进球,c[i]=2表示第i秒R进球
int blue,red;
node middle;
int main(){
cin>>n>>m;
middle.x=(n+1)/2;
middle.y=(m+1)/2;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
string p=a[i][j];
mp[p]=(node){i,j};
}
}
cin>>t;
for(int i=0;i<t;i++){
string player,action;
cin>>player>>action;
node axis=mp[player];
if(action=="L"){
axis.y--;
mp[player]=axis;
}else if(action=="R"){
axis.y++;
mp[player]=axis;
}else if(action=="U"){
axis.x--;
mp[player]=axis;
}else if(action=="D"){
axis.x++;
mp[player]=axis;
}else if(action=="T"){
if(a[axis.x][axis.y][1]=='G'){
if(a[axis.x][axis.y][0]=='B'){
red++;
c[i]=1;
}else{
blue++;
c[i]=2;
}
mp[".Q"]=middle;
}
}else{
cin>>action;
mp[".Q"].x=mp[player].x;
mp[".Q"].y=mp[player].y;
}
}
for(int i=0;i<t;i++){
if(c[i]==1) cout<<i<<" RED GOAL\n";
else if(c[i]==2) cout<<i<<" BLUE GOAL\n";
}
cout<<"FINAL SCORE: "<<red<<' '<<blue<<endl;
return 0;
}
标签:Quidditch,int,题解,CF1970F1,else,player,mp,action,axis
From: https://blog.csdn.net/hugou6666/article/details/139575932