uva10881-虫虫爬杆

来源:互联网 发布:怎样看待网络语言暴力 编辑:程序博客网 时间:2024/06/08 06:28

这一题先看了大白书上的思想就自己敲了代码,也找了很多的数据,都可以,可是交上去就是不过,之后看了大白书上的代码和我的想法是一样的,啊郁闷,把大白书书上的代码敲上去,结果verdict是空的,更郁闷!!

先写我的代码和找到的数据:

4
10 1 4
1 R
5 R
3 L
10 R
10 2 3
4 R
5 L
8 R
10 2 4
1 R
3 R
5 L
7 L
10 4 4
1 R
4 L
5 L
7 L

结果是:

Case #1:
2 Turning
6 R
2 Turning
Fell off

Case #2:
3 L
6 R
10 R

Case #3:
3 Turning
3 Turning
5 Turning
5 Turning

Case #4:
0 L
1 L
3 L
5 R


我的代码是:

#include<cstdio>#include<iostream>#include<cmath>#include<algorithm>using namespace std;const int maxn=10000+5;struct node{    int i,pos,l;}ant[maxn];int p[maxn];bool cmp1(node a,node b){    if(abs(a.pos)==abs(b.pos))return a.i<b.i;    return abs(a.pos)<abs(b.pos);}int main(){    freopen("int.txt","r",stdin);    freopen("out.txt","w",stdout);    int n,l,t,T,cas=1;    char op;    scanf("%d",&T);    while(T--){        printf("Case #%d:\n",cas++);        scanf("%d%d%d",&l,&t,&n);        for(int i=0;i<n;i++){            ant[i].i=i;            scanf("%d %c",&ant[i].pos,&op);            if(op=='L'){                ant[i].pos=-1*ant[i].pos;                ant[i].l=1;            }            else ant[i].l=0;        }        sort(ant,ant+n,cmp1);        for(int i=0;i<n;i++){            p[ant[i].i]=i;        }        for(int i=0;i<n;i++){            ant[i].pos+=t;        }        sort(ant,ant+n,cmp1);        for(int i=0;i<n;i++){            if(!(ant[p[i]].l)&&ant[p[i]].pos<=l&&ant[p[i]].pos>=0){                printf("%d ",ant[p[i]].pos);                bool flag=false;                if(p[i]&&ant[p[i]].pos==abs(ant[p[i]-1].pos))flag=true;                else if(p[i]!=n-1&&ant[p[i]].pos==abs(ant[p[i]+1].pos))flag=true;                if(flag)printf("Turning\n");                else printf("R\n");            }            else if(!(ant[p[i]].l))printf("Fell off\n");            else if(ant[p[i]].l&&ant[p[i]].pos<=0){                printf("%d ",-1*ant[p[i]].pos);                bool flag=false;                if(p[i]!=n-1&&abs(ant[p[i]].pos)==abs(ant[p[i]+1].pos))flag=true;                else if(p[i]!=0&&abs(ant[p[i]].pos)==abs(ant[p[i]-1].pos))flag=true;                if(flag)printf("Turning\n");                else printf("L\n");            }            else if(ant[p[i]].l)printf("Fell off\n");        }        printf("\n");    }    return 0;}


大白书上的代码是:

#include<cstdio>#include<iostream>#include<algorithm>using namespace std;const int maxn=1e4+5;struct Ant{    int id,p,d;    bool operator < (const Ant& a)const {        return p<a.p;    }}before[maxn],after[maxn];const char dir[][10]={"L","Turning","R"};int order[maxn];int main(){    int k;    //freopen("int.txt","r",stdin);    scanf("%d",&k);    for(int cas=1;cas<=k;cas++){        int L,T,n;        printf("Case #%d:\n",cas);        scanf("%d%d%d",&L,&T,&n);        for(int i=0;i<n;i++){            int p,d;            char op;            scanf("%d %c",&p,&op);            d=(op=='L'?-1:1);            before[i]=(Ant){i,p,d};            after[i]=(Ant){0,p+T*d,d};        }        sort(before,before+n);        for(int i=0;i<n;i++){            order[before[i].id]=i;        }        sort(after,after+n);        for(int i=0;i<n-1;i++){            if(after[i].p==after[i+1].p)after[i].d=after[i+1].d=0;        }        for(int i=0;i<n;i++){            int a=order[i];            if(after[a].p<0||after[a].p>L)printf("Fell off\n");            else printf("%d %s\n",after[a].p,dir[after[a].d+1]);        }        printf("\n");    }    return 0;}


0 0
原创粉丝点击