首页 / 算法 / 牛客寒假算法基础集训营5 I 炫酷镜子
牛客寒假算法基础集训营5 I 炫酷镜子
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了牛客寒假算法基础集训营5 I 炫酷镜子,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3592字,纯文字阅读大概需要6分钟。
内容图文
![牛客寒假算法基础集训营5 I 炫酷镜子](/upload/InfoBanner/zyjiaocheng/843/e5c7f51e238340178650f775416df09d.jpg)
链接:https://ac.nowcoder.com/acm/contest/331/I
来源:牛客网
小希拿到了一个镜子块,镜子块可以视为一个N x M的方格图,里面每个格子仅可能安装`\`或者`/`的镜子,会反射90°光线,也可能没有安装镜子,使用`.`代替。
但她看不清楚里面的镜子构造是怎样的。
你是这块镜子块的主人,所以你想计算这块镜子块(从输入的上方往下射入光线)从左到右每一格射入依次分别会从最下面的哪一格子射出,如果无法射出,输出-1。
纯模拟,因为光沿直线传播,一直跑就行。
刚开始各种本地没结果。。
细节:改变方向时先判断是否越界 越界出答案,每越界的话,走到改变后的第一个位置
代码有点丑。
1 #include<stdio.h> 2 #include<string.h> 3 int n,m,ans[510],newx,newy; 4 char g[510][510]; 5 6 int work(int x,int y) { 7 int newx=x,newy=y,op=1; 8 bool flag; 9 while(1) { 10 flag=false; 11 if(op==1) { //down 12 for(int i=newx;i<n;i++) { 13 if(g[i][newy]=='\\') { 14 flag=true; 15 if(newy+1==m) return -1; 16 newx=i; 17 newy++; 18 op=2; //--->right 19 break; 20 } else if(g[i][newy]=='/') { 21 flag=true; 22 if(newy-1<0) return -1; 23 newx=i; 24 newy--; 25 op=4; //--->left 26 break; 27 } 28 } 29 if(!flag) return newy; 30 } else if(op==2){ //right 31 for(int i=newy;i<m;i++) { 32 if(g[newx][i]=='\\') { 33 flag=true; 34 if(newx+1==n) return i; 35 newy=i; 36 newx++; 37 op=1; //--->down 38 break; 39 }else if(g[newx][i]=='/') { 40 flag=true; 41 if(newx-1<0) return -1; 42 newx--; 43 newy=i; 44 op=3; //---->up 45 break; 46 } 47 } 48 if(!flag) return -1; 49 } else if(op==3) { //up 50 for(int i=newx;i>=0;i--) { 51 if(g[i][newy]=='\\') { 52 flag=true; 53 if(newy-1<0) return -1; 54 newx=i; 55 newy--; 56 op=4; //---->left 57 break; 58 } else if(g[i][newy]=='/') { 59 flag=true; 60 if(newy+1==m) return -1; 61 newx=i; 62 newy++; 63 op=2; //--->right 64 break; 65 } 66 } 67 if(!flag) return -1; 68 } else { //left 69 for(int i=newy;i>=0;i--) { 70 if(g[newx][i]=='\\') { 71 flag=true; 72 if(newx-1<0) return -1; 73 newx--; 74 newy=i; 75 op=3; //---->up 76 break; 77 } else if(g[newx][i]=='/') { 78 flag=true; 79 if(newx+1==n) return i; 80 newx++; 81 newy=i; 82 op=1; //---->down 83 break; 84 } 85 } 86 if(!flag) return -1; 87 } 88 } 89 } 90 91 int main() { 92 scanf("%d%d",&n,&m); 93 for(int i=0;i<n;i++) scanf("%s",g[i]); 94 for(int i=0;i<m;i++) { 95 ans[i]=work(0,i); 96 } 97 for(int i=0;i<m;i++) printf("%d\n",ans[i]==-1?-1:ans[i]+1); 98 return 0; 99 }
内容总结
以上是互联网集市为您收集整理的牛客寒假算法基础集训营5 I 炫酷镜子全部内容,希望文章能够帮你解决牛客寒假算法基础集训营5 I 炫酷镜子所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。