UESTC 758 P酱的冒险旅途 新手题

ProLightsfx 2015-11-2 116 11/2

P酱的冒险旅途 新手题

My Solution

用数组的话,扫一次就够了;节约数组的话要扫好几次。我选择了用数组。觉得自己写的挺麻烦的。
#include 
#include 
#include 
#include 
using namespace std;
const int maxn=200000+8;
int cot[26][maxn];//为了找最后一个最短的最后一个动作

int main()
{
    int x,y,t,T,err=-1,ti;
    string str;
    scanf("%d",&T);
    while(T--){
        memset(cot,0,sizeof(cot));//不能用memset初始化除0以外的值... ... 如果想赋值0, 那么你可以用一个for loop... 至于为什么不能赋值#, 请参考百度知道http://baike.baidu.com/view/982208.htm
        scanf("%d%d%d",&x,&y,&t);
        cin>>str;
        int len=str.length();
        int l=0,r=0,u=0,d=0;
        for(int i=0;i<len;i++){ //第一个时间是1,所以要从1开始,但导致历遍的时候不好,所以加到下面去好了 switch(str[i]){ case 'L': {l++;cot['L'-'A'][l]=i+1;break;}//!注意每个地方都要用'X'-'A'转化过来 case 'R': {r++;cot['R'-'A'][r]=i+1;break;} case 'U': {u++;cot['U'-'A'][u]=i+1;break;} case 'D': {d++;cot['D'-'A'][d]=i+1;break;} //cot['d'-'a'][d]=i; default: break; } } if(x>=0&&y>=0){
            if(x<=r&&y<=u) { ti=max(cot['R'-'A'][x],cot['U'-'A'][y]);printf("%dn",ti<=t? ti:err);} else printf("%dn",err); } else if(x>=0&&y<=0){
            if(x<=r&&(-y)<=d) {ti=max(cot['R'-'A'][x],cot['D'-'A'][(-y)]);printf("%dn",ti<=t? ti:err);}
            else printf("%dn",err);
        }
        else if(x<=0&&y>=0){
            if((-x)<=l&&y<=u) {ti=max(cot['L'-'A'][(-x)],cot['U'-'A'][y]);printf("%dn",ti<=t? ti:err);}
            else printf("%dn",err);
        }  //等号全部放上去,不要紧的
        else{
            if((-x)<=l&&(-y)<=d) {ti=max(cot['L'-'A'][(-x)],cot['D'-'A'][-y]);printf("%dn",ti<=t? ti:err);}
            else printf("%dn",err);   //!前面没有AC是这里掉了个 else
        }
    }
    return 0;
}

 

非特殊说明,本站所有文章均为博主原创,未经许可不得转载。

https://www.prolightsfxjh.com/

Thank you!

                                                                                                                                             ------from ProLightsfx

 

- THE END -

ProLightsfx

11月16日09:08

最后修改:2024年11月16日
0

非特殊说明,本博所有文章均为博主原创,未经许可不得转载。

共有 0 条评论