第十届山东省acm省赛-C-Wandering Robot

在zoj上的原题链接:
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=6017
原谅我的懒惰,不想把题打上了,仅此一次嘿嘿

说一下这个题,怎么说呢,当时做的时候 题!意!理!解!错!了!
原谅俺从小英语就不好,凭啥比赛语言是英文的呀??!!!!
有段话没看懂,理解错了!!!
论学好英语的重要性!!!!!
论学好英语的重要性!!!!!
论学好英语的重要性!!!!!
以后上英语课再也不睡觉了啊啊啊啊啊啊!!
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊!!!
我的天呐!
蛮简单的一道题,题意读错了呜呜呜呜呜呜呜
爆哭
原来是求(0,0)到那些点的距离,不是任意两点的!!!!!
因为 n 小于1e5,所以直接暴力搜就行!!!!
而且最远点只会在第一次或最后一次循环中
所以两次1e5 的暴搜直接解决问题!!!
崩溃了,写完这篇博客我要重新思考我的人生了,是不是要开始背单词了呢?
我是真的要自闭了啊!

代码

#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
char s[100005];
struct stu
{
    long long x;
    long long y;
}q[100005],p[100005];  //这里用结构体存储第一次和第二次循环的点
int main()
{
    int t,cx[100005],cy[100005]; //用来记录两次循环中坐标的差值
    long long max1,max2,m; //max1,max2记录第一次和最后一次最大曼哈顿距离,最后输出两者中大的那个
    long long n,k,a,b;
    scanf("%d",&t);  //t组测试
    while( t-- )
    {
        a=b=0;
        max1=max2=-1;
        scanf("%lld %lld",&n,&k);
        scanf("%s",s);
        for(int i=0;i<n;i++)  //这里直接第一遍暴搜
        {
            if(s[i]=='U')
            {b=b+1;}
            if(s[i]=='D')
            {b=b-1;}
            if(s[i]=='L')
            {a=a-1;}
            if(s[i]=='R')
            {a=a+1;}
            p[i].x=a;
            p[i].y=b;
            m=labs(p[i].x)+labs(p[i].y);
            if(m>max1)
            {max1=m;}
        }
        if(k>1){     //这里当k大于1时记录每次循环间的差值
        for(int i=0;i<n;i++)
        {
            if(s[i]=='U')
            {b=b+1;}
            if(s[i]=='D')
            {b=b-1;}
            if(s[i]=='L')
            {a=a-1;}
            if(s[i]=='R')
            {a=a+1;}
            q[i].x=a;
            cx[i]=q[i].x-p[i].x;
            q[i].y=b;
            cy[i]=q[i].y-p[i].y;
        }
        for(int i=0;i<n;i++)   //这里算出最后一次循环的点并暴搜找出最大曼哈顿距离
        {
            q[i].x=p[i].x+cx[i]*(k-1);
            q[i].y=p[i].y+cy[i]*(k-1);
            m=labs(q[i].x)+labs(q[i].y);
            if(m>max2)
            {max2=m;}
        }
        }
        if(max1>=max2)   //两者比较,输出大的
        {printf("%lld\n",max1);}
        else
        {printf("%lld\n",max2);}
    }
    return 0;
}

写完在zoj上提交一遍过…
555555555555555555555555~

救救孩子吧,我真的是要哭了。。。。。。

你可能感兴趣的:(题解)