反射(纪中模拟赛——普及)

题目大意:

农夫约翰把他的很多镜子遗落在房子外面,他的奶牛们对这些镜子很好奇,于是奶牛们把这些镜子偷了!
奶牛们把镜子放在了一个N*M的矩阵中,在每个小方格中,他们将镜子按正对角线或者反对角线的方式放置,也就是说镜子的放置形状要么是’/’,要么是’\’。
某一天晚上,奶牛贝里斯拿着一个手电筒站在矩阵的外面,他打开手电筒按水平或者垂直方向朝矩阵内的镜子照射,由于镜子是对角线或者反对角线放置的,所以如果垂直的光过来的话,反射出来的光就是水平的,反之也是同样的道理。贝里斯想要知道他从外面照过来的光最多能被镜子反射几次。

输入

 第一行是两个正整数N和M,表示矩阵的大小。
 接下里N行,每行M个字符,表示矩阵内镜子放置的情况。字符是’/’或者’\’。

输出

 输出一个整数,表示从外面照射进来的一束光最多能在矩阵内被反射的次数,如果会被反射无限次,就输出-1。

样例输入

3 3
/\
\\
/\/

样例输出

3

数据范围限制

【数据规模】
1<=N,M<=1000。

提示

【样例说明】
贝里斯的光如果从中间列的上方照射的话,将被反射3次。

解题思路:

暴力模拟————把所有情况枚举一次(具体看程序),然后两个循环过。顺便提醒一下————没有无限的情况————
#include <cstdio>
using namespace std;
char c[1001][1001];
int ans,maxn,n,o,m,a[1001][1001],w,f;
int main()
{
    freopen("mirror.in","r",stdin);
    freopen("mirror.out","w",stdout);
    scanf("%d%d",&n,&m);
    getchar();
    for (int i=1;i<=n;i++,getchar())
     for (int j=1;j<=m;j++)
      c[i][j]=getchar();
     for (int i=1;i<=n;i+=n-1)
      for (int j=1;j<=m;j++)
        {
            if (i==1)f=1; else f=3;
            ans=0;
            int x=i,y=j;
            while (i==i)
            {
                o++;
                     if (c[x][y]=='/'&&f==1&&y>=1) y--,f=4;
                else if (c[x][y]=='/'&&f==2&&x>=1) x--,f=3;
                else if (c[x][y]=='/'&&f==3&&y<=m) y++,f=2;
                else if (c[x][y]=='/'&&f==4&&x<=n) x++,f=1;
                else if (c[x][y]!='/'&&f==1&&y<=m) y++,f=2;
                else if (c[x][y]!='/'&&f==2&&x<=n) x++,f=1;
                else if (c[x][y]!='/'&&f==3&&y>=1) y--,f=4;
                else if (c[x][y]!='/'&&f==4&&x>=1) x--,f=3;
                else break;
                ans++;
                if (x<1||y<1||x>n||y>m) break;
            }
            if (ans>maxn) maxn=ans; 
        }

     for (int j=1;j<=m;j+=m-1)
      for (int i=1;i<=n;i++)
       {
            if (j==1)f=2; else f=4;
            ans=0;
            int x=i,y=j;
            a[i][j]=1;  
            while (i==i)
            {
                o++;
                     if (c[x][y]=='/'&&f==1&&y>=1) y--,f=4;
                else if (c[x][y]=='/'&&f==2&&x>=1) x--,f=3;
                else if (c[x][y]=='/'&&f==3&&y<=m) y++,f=2;
                else if (c[x][y]=='/'&&f==4&&x<=n) x++,f=1;
                else if (c[x][y]!='/'&&f==1&&y<=m) y++,f=2;
                else if (c[x][y]!='/'&&f==2&&x<=n) x++,f=1;
                else if (c[x][y]!='/'&&f==3&&y>=1) y--,f=4;
                else if (c[x][y]!='/'&&f==4&&x>=1) x--,f=3;
                else break;
                ans++;
                if (x<1||y<1||x>n||y>m) break;
            }
            if (ans>maxn) maxn=ans; 
       }
    printf("%d",maxn);
}

转载于:https://www.cnblogs.com/Juruo-HJQ/p/9306960.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值