zoukankan      html  css  js  c++  java
  • 洛谷1076 寻宝

    洛谷1076 寻宝

    本题地址: http://www.luogu.org/problem/show?pid=1076

    题目描述

    传说很遥远的藏宝楼顶层藏着诱人的宝藏。小明历尽千辛万苦终于找到传说中的这个藏宝楼,藏宝楼的门口竖着一个木板,上面写有几个大字:寻宝说明书。说明书的内容如下:
    藏宝楼共有N+1层,最上面一层是顶层,顶层有一个房间里面藏着宝藏。除了顶层外,藏宝楼另有N层,每层M个房间,这M个房间围成一圈并按逆时针方向依次编号为0,…,M-1。其中一些房间有通往上一层的楼梯,每层楼的楼梯设计可能不同。每个房间里有一个指示牌,指示牌上有一个数字x,表示从这个房间开始按逆时针方向选择第x个有楼梯的房间(假定该房间的编号为k),从该房间上楼,上楼后到达上一层的k号房间。比如当前房间的指示牌上写着2,则按逆时针方向开始尝试,找到第2个有楼梯的房间,从该房间上楼。如果当前房间本身就有楼梯通向上层,该房间作为第一个有楼梯的房间。
    寻宝说明书的最后用红色大号字体写着:“寻宝须知:帮助你找到每层上楼房间的指示牌上的数字(即每层第一个进入的房间内指示牌上的数字)总和为打开宝箱的密钥”。
    请帮助小明算出这个打开宝箱的密钥。

    输入输出格式

    输入格式:

    第一行2个整数N和M,之间用一个空格隔开。N表示除了顶层外藏宝楼共N层楼,M表示除顶层外每层楼有M个房间。
    接下来N*M行,每行两个整数,之间用一个空格隔开,每行描述一个房间内的情况,其中第(i-1)*M+j行表示第i层j-1号房间的情况(i=1,2,…, N;j=1,2,…,M)。第一个整数表示该房间是否有楼梯通往上一层(0表示没有,1表示有),第二个整数表示指示牌上的数字。注意,从j号房间的楼梯爬到上一层到达的房间一定也是j号房间。
    最后一行,一个整数,表示小明从藏宝楼底层的几号房间进入开始寻宝(注:房间编号从0开始)。

    输出格式:

    输出只有一行,一个整数,表示打开宝箱的密钥,这个数可能会很大,请输出对20123取模的结果即可。

    输入输出样例

    输入样例#1:

    2 3

    1 2

    0 3

    1 4

    0 1

    1 5

    1 2

    1

    输出样例#1:

    5

    说明

    【数据范围】
    对于50%数据,有0<N≤1000,0<x≤10000;
    对于100%数据,有0<N≤10000,0<M≤100,0<x≤1,000,000。


    NOIP 2012 普及组 第二题

    【思路】

      简单模拟。

      不过需要注意的是每次移动可能会很大,所以需要%次c[i]+c[i]之后再模拟查找,+c[i]目的是防止模为0而不移动。

      另外读图的话注意cin cout

    【代码】

     1 #include<iostream>
     2 using namespace std;
     3 
     4 const int maxn = 10001;
     5 const int MOD= 20123;
     6 
     7 int n,m;
     8 int can[maxn][101];
     9 int op[maxn][101];
    10 int c[maxn];
    11 
    12 int main()
    13 {
    14     ios::sync_with_stdio(false);
    15     cin>>n>>m;
    16     for(int i=1;i<=n;i++) 
    17       for(int j=0;j<m;j++) 
    18       {
    19          cin>>can[i][j]>>op[i][j];
    20          c[i] += can[i][j];
    21       }
    22          
    23     long long ans=0;
    24     int pos; cin>>pos;
    25     for(int i=1;i<=n;i++)
    26     {
    27          ans=(ans+op[i][pos])%MOD;
    28          int cnt=op[i][pos]%c[i]+c[i];
    29          cnt-=can[i][pos];
    30          while(cnt) {
    31              pos++;
    32              if(pos==m) pos=0;
    33              if(can[i][pos]) cnt--;
    34          }
    35     }
    36     cout<<ans;
    37     return 0;
    38 }
  • 相关阅读:
    不务正业系列-浅谈《过气堡垒》,一个RTS玩家的视角
    [LeetCode] 54. Spiral Matrix
    [LeetCode] 40. Combination Sum II
    138. Copy List with Random Pointer
    310. Minimum Height Trees
    4. Median of Two Sorted Arrays
    153. Find Minimum in Rotated Sorted Array
    33. Search in Rotated Sorted Array
    35. Search Insert Position
    278. First Bad Version
  • 原文地址:https://www.cnblogs.com/lidaxin/p/4883105.html
Copyright © 2011-2022 走看看