题目
不知从多久前的这个村庄,在风中摇曳的饱满麦穗,就被比作狼在奔跑。被风吹倒的麦穗,是被狼踩踏,青黄不接时则是为狼所食。起初的我一无所有,有的只是一点点温暖。于是,我缔结了一个约定,保佑这个村子风调雨顺。
邂逅与离别反复交替,人类终究做到了只凭自己的力量取得丰收,或许我不必再信守约定了。
但是,时间已过去数百年,我该去哪里呢?
这个村庄总有许许多多的旅行商人来来往往,或许他们的马车可以把我带到意想不到的地方。我决定,跳上第一个路过我身边的且看上去不错的人的车,如果有多个商人同时到达,我就跳上好感度最高的人的车,每个人的好感度都不同。
故事正式开始,主人公名叫Holo。
一共有N个旅行商人,每个旅行商人都有一个起始点(X_i,Y_i),旅行商人每分钟可以向上,下,左,右四个方向之一移动一个单位,每个旅行商人的路线在输入数据中给出。
凡是好感度不低于KK的人,Holo都觉得看上去不错。
因为现在是丰收的季节,Holo只能躲在麦堆里,因此,她的位置(Pa,Pb)(Pa,Pb)不会变化。
……
解答
这个题目模拟就完事了,主要是每个商人路径模拟一下看看能不能遇到Holo,如果好感度不够就直接忽略。然后相同时间到达取好感最高的商人。
两个小坑点,一个是坐标存储要取 long long。还有一个是商人可能刷新在脸上,0步就到达Holo所在位置。
#include<iostream>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int T,n;
//Holo信息
ll s,t;
int hao;
//储存商人信息
struct node
{
ll x,y;
int hao;
int pos;
int sum;
string str;
}tree[11];
//商人寻路
int dfs(node p)
{
int cnt=0;
ll x=p.x;
ll y=p.y;
if(x==s&&y==t)
return 0;
for(int i=0;i<p.str.length();i++)
{
switch(p.str[i])
{
case 'U':x=x+1;break;
case 'R':y=y+1;break;
case 'L':y=y-1;break;
case 'D':x=x-1;break;
};
cnt++;
if(x==s&&y==t)
return cnt;
}
return -1;
}
int main() {
cin>>T;
while(T--)
{
ll Min=-1;
vector<node>res;
cin>>s>>t>>hao;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>tree[i].x>>tree[i].y>>tree[i].hao;
cin>>tree[i].str;
tree[i].pos=i+1;
}
for(int i=0;i<n;i++)
{
if(tree[i].hao<hao)
continue;
else
{
ll temp=dfs(tree[i]);
if(Min==-1)
{
if(temp!=-1)
{
Min=temp;
res.push_back(tree[i]);
}
}else if(temp==Min)
{
res.push_back(tree[i]);
}else if(temp<Min)
{
Min=temp;
res.clear();
res.push_back(tree[i]);
}
}
}
if(res.size()==0)
cout<<-1<<endl;
else
{
int Max=0;
int pos=0;
for(int i=0;i<res.size();i++)
{
if(res[i].hao>Max)
{
Max=res[i].hao;
pos=res[i].pos;
}
}
cout<<pos<<endl;
}
}
}