zoukankan      html  css  js  c++  java
  • 寻宝

    第二题 寻宝

    #include<bits/stdc++.h>

    using namespace std;

    int sum,qqq,q11,kk,k,n,m,a[10001][10001],s[10001][10001],w[10001];

    int main(){

    cin>>n>>m;

    for(int i=1;i<=n;i++)

    for(int j=0;j<=m-1;j++)

    {

    cin>>a[i][j]>>s[i][j];

    }

    cin>>k;

    for(int i=1;i<=n;i++)

    for(int j=0;j<=m-1;j++)

    {

    if(a[i][j]==1)

    w[i]++;

    }

    for(int i=1;i<=n;i++)

    {

    int k1=0;

    kk=s[i][k];

    sum+=kk,sum%=20123;

    kk%=w[i];

    if(kk==0)

    {

    kk=w[i];

    }

    for(int j=k;j<=m-1;j++)

    {

    if(a[i][j]==1)

    {

    k1++;

    if(k1==kk)

    {

    k=j;

    break;

    }

    }

    if(j==m-1)

    {

    j=-1;

    }

    }

    }

    cout<<sum; 

    return 0;

    }

    本来我看了这道题是完全没有心情去做的,字太多了,一看就不会做!!!!!

    其实它是非常简单的,不涉及什么复杂的算法,只需要简单的模拟一下过程,再优化一下就行了。

    模拟过程如下:

    首先输入,

    a数组存每个房间是否有阶梯的判断,s数组存每个房间的指示数

    用k记录每次到达的那个房间的编号。

    用kk记录其指示数,

    从第一层开始往上爬,到达第i层,sum+其指示数,从第k号开始遍历,数kk个楼梯房,第kk个就是我们所要找的,此时就可以记录第几号房间停留的,用k更新,再用break停止循环,我们需要考虑到从第k个数到m-1个或许还不够kk个楼梯房,那么我们需要去他的下一个房间也就是第0号房间数个数。

    if(j==m-1)

    {

    j=-1;

    }

    这个是我的代码实现,用以构成环,因为你想要数第0个,就想办法使j在第m-1个之后变成第0个,我们的循环是j++,使j在下一次成为零,那就使其在这一次成为-1,下一次自然就为0了。

    然后提交代码,超时,显然需要优化。

    可以在输入数组时直接把每一层有楼梯的个数给数出来,用w数组表示。

    直接kk%w[i],省去大部分时间重复寻找,注意如果kk是w[i]的倍数,需要使kk=w[i],否则kk=0,它怎么找?

    然后就没有然后了。

  • 相关阅读:
    怎么安装Python?
    Ramnit蠕虫病毒分析和查杀
    Exphub[漏洞利用脚本库]
    SMBv3远程代码执行漏洞复现(CVE-2020-0796)
    Tomcat AJP 文件包含漏洞复现(CVE-2020-1938)
    Fastjson远程代码执行漏洞复现
    信息收集之——旁站、C段
    Redis未授权访问漏洞复现与利用
    CSS
    MVC控制器路由
  • 原文地址:https://www.cnblogs.com/xxmxxm/p/10704513.html
Copyright © 2011-2022 走看看