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

poj 1835 宇航员

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

poj 1835 宇航员

#include <cstdio>#include <cstring>using std::memset;int direction[6][3] = {{1,0,0}, {0,1,0}, {0,0,1}, {-1,0,0}, {0,-1,0}, {0,0,-1}};int head[3], face[3], position[3];int dot(int x[3], int y[3]){    int ans = 0;    for(int i = 0 ; i < 3; i++)    ans += x[i]*y[i];    return ans;}bool equal(int x[3],int y[3]){    for(int i = 0 ; i < 3; i++)    if(x[i] != y[i])    return false;    return true;}void cross(int x[3],int y[3], int ans[3]){    ans[0] = x[1]*y[2] - x[2]*y[1];    ans[1] = x[2]*y[0] - x[0]*y[2];    ans[2] = x[0]*y[1] - x[1]*y[0];    return;}void back(){    for(int i = 0 ; i < 3; i++)    face[i] = -face[i];}void left(){    for(int i = 0 ; i < 6; i++)    {        if(dot(direction[i], head))        continue;        if(dot(direction[i], face))        continue;        int temp[3];        cross(direction[i], face, temp);        if(equal(head, temp) ==  false)        continue;        for(int j = 0 ; j < 3; j++)        face[j] = direction[i][j];        return;    }}void right(){    for(int i = 0 ;i < 3; i++)    left();}void up(){    int temp[3];    for(int i = 0 ; i < 3; i++)    temp[i] = face[i];    for(int i = 0 ; i < 3; i++)    face[i] = head[i];    for(int i = 0 ; i < 3; i++)    head[i] = -temp[i];}void down(){    for(int i = 0 ; i  < 3; i++)    up();}int main(){    int cas;    scanf("%d",&cas);    while(cas--)    {        int n;        scanf("%d", &n);        face[0] = 1; face[1] = 0; face[2] = 0;        head[0] = 0; head[1] = 0; head[2] = 1;        position[0] = 0; position[1] = 0; position[2] = 0;        while(n--)        { char op[10]; int x; scanf("%s%d", op, &x); switch(op[0]) {     case 'l': left(); break;     case 'r': right(); break;     case 'f': break;     case 'b': back(); break;     case 'u': up(); break;     case 'd': down(); break; } for(int i = 0 ; i < 3; i++) {     position[i] += x * face[i]; }        }        for(int i = 0 ; i < 3; i++)        printf("%d ", position[i]);        for(int i = 0 ; i < 6; i++)        { if(equal(face, direction[i])) printf("%dn", i);        }    }}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/379609.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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