狼与故事的开始

ZJUTOJ-狼与故事的开始

题目

题目地址-点此跳转

不知从多久前的这个村庄,在风中摇曳的饱满麦穗,就被比作狼在奔跑。被风吹倒的麦穗,是被狼踩踏,青黄不接时则是为狼所食。起初的我一无所有,有的只是一点点温暖。于是,我缔结了一个约定,保佑这个村子风调雨顺。

邂逅与离别反复交替,人类终究做到了只凭自己的力量取得丰收,或许我不必再信守约定了。

但是,时间已过去数百年,我该去哪里呢?

这个村庄总有许许多多的旅行商人来来往往,或许他们的马车可以把我带到意想不到的地方。我决定,跳上第一个路过我身边的且看上去不错的人的车,如果有多个商人同时到达,我就跳上好感度最高的人的车,每个人的好感度都不同。

故事正式开始,主人公名叫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;			
		}
				
	 }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值