栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 1317 Centipede Collisions

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 1317 Centipede Collisions

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <queue>using namespace std;int x[39][39];int n;int dx[] = {1,0,-1,0};int dy[] = {0,1,0,-1};struct node{    int x,y,len,dir;    int move;} re[19];bool oor(int x,int y){    if(x<0||x>29) return false;    if(y<0||y>29) return false;    return  true;}bool stop[19],cash[19];int map_move[39][39];void init(){    int l,r,c;    char d[5];    memset(map_move,-1,sizeof(map_move));    memset(x,false,sizeof(x));    for(int i=0; i<n; i++)    {        scanf("%s%d%d%d",d,&l,&r,&c);        re[i].len = l,re[i].x = r,re[i].y = c;        if(d[0]=='R') re[i].dir = 0;        else if(d[0]=='U') re[i].dir = 1;        else if(d[0]=='L') re[i].dir = 2;        else re[i].dir = 3;        re[i].move = 1;        int tx = r,ty = c;        for(int j =0;j<l;j++)        { map_move[tx][ty] = i; tx-=dx[re[i].dir]; ty-=dy[re[i].dir];        }    }}void solve(){    bool fig = true;    while(fig)    {        fig = false;        for(int i=0; i<n; i++)        { if(re[i].move==0) { } else {     fig = true;     re[i].x+=dx[re[i].dir];     re[i].y+=dy[re[i].dir];     if(!oor(re[i].x,re[i].y))     {         if(re[i].len>0)         {  re[i].x-=dx[re[i].dir];  re[i].y-=dy[re[i].dir];  re[i].len--;  if(re[i].len<=0) re[i].move = 0;         }     }     if(map_move[re[i].x][re[i].y]!=-1&&map_move[re[i].x][re[i].y]!=i)     {         re[map_move[re[i].x][re[i].y]].move = 0;         re[i].move = 0;         x[re[i].x][re[i].y] = true;     }     map_move[re[i].x][re[i].y]=i;     map_move[re[i].x-dx[re[i].dir]*(re[i].len)][re[i].y-dy[re[i].dir]*(re[i].len)]=-1; }        }    }    cout<<"   0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2"<<endl;    cout<<"   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9"<<endl;    for(int i=0; i<30; i++)    {        printf("%02d",29-i);        for(int j=0; j<30; j++) if(!x[j][29-i]) cout<<" ."; else cout<<" X";        cout<<endl;    }    cout<<endl;}int main(){    while(~scanf("%d",&n))    {        init();        solve();    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/378473.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号