NOIP201202尋寶

題目

試題描述
傳說很遙遠的藏寶樓頂層藏著誘人的寶藏。 小明歷盡千辛萬苦終于找到傳說中的這個藏寶樓,藏寶樓的門口豎著一個木板,上面寫有幾個大字:尋寶說明書。
??? 說明書的內容如下:藏寶樓共有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取模的結果即可。
輸入示例
2?3
1?2
0?3
1?4
0?1
1?5
1?2
1
輸出示例
5
其他說明
【輸入輸出樣例說明】
????第一層:
????????0?號房間,有樓梯通往上層,指示牌上的數字是?2;?
????????1?號房間,無樓梯通往上層,指示牌上的數字是?3;
????????2?號房間,有樓梯通往上層,指示牌上的數字是?4;
????第二層:
????????0?號房間,無樓梯通往上層,指示牌上的數字是?1;
????????1?號房間,有樓梯通往上層,指示牌上的數字是?5;
????????2?號房間,有樓梯通往上層,指示牌上的數字是?2;
小明首先進入第一層(底層)的?1?號房間,記下指示牌上的數字為3,然后從這個房間開始,?沿逆時針方向選擇第3個有樓梯的房間2號房間進入,上樓后到達第二層的2號房間,記下指示牌上的數字為2,?由于當前房間本身有樓梯通向上層,該房間作為第一個有樓梯的房間。因此,此時沿逆時針方向選擇第2個有樓梯的房間即為1號房間,進入后上樓梯到達頂層。這時把上述記下的指示牌上的數字加起來,即3+2=5,所以打開寶箱的密鑰就是5。
【數據范圍】0<N≤10000,0<M≤100,0<x≤1,000,000。

分析

這道題是一個裸的模擬,但有許多細節需要注意。我們定義f[x][y]表示第x層第y個房間是否有樓梯,num[x][y]表示第x層第y個房間指示牌上的數字。sum[i]表示第i層有幾個有樓梯的房間。然后逐層模擬,找有樓梯的房間。這部很關鍵,代碼如下。

if(f[floar][room]) room_num--; //room_num表示還需要找幾個有樓梯的房間。
room_num=((room_num-1)%sum[floar])+1; //括號里減1最后加1保證值不為0,因為(room_num-1)%sum[floar]≥0且1>0。最后化簡得:若(room_num-1)%sum[floar]=0,整體為1。反之為1。?
while(room_num>0)
{room++;if(room>m) room=0; //若搜到最高房間號,從0開始。實現一個循還。if(f[floar][room]) room_num--; //若f[floar][room]為1,說明這個有樓梯。則還需要找的有樓梯的房間數--。
}

  

再定義ans,把每層第一個有樓梯的房間指示牌上的數字累加。值得注意的是,房間號是從0到m-1。完整代碼如下。

#include <bits/stdc++.h>
using namespace roomd;
#define MOD 20123
int n,m,num[10005][105],sum[10005],ans,room,floar=1;
bool f[10005][105];
int main() {scanf("%d %d",&n,&m);for(int i=1; i<=n; i++) {for(int j=1; j<=m; j++) {int x,y;scanf("%d %d",&x,&y);if(x) {f[i][j]=true;sum[i]++;}num[i][j]=y;}}scanf("%d",&room);room++;while(floar<=n) {int room_num=num[floar][room];ans=(ans+room_num)%MOD;if(f[floar][room]) room_num--;room_num=((room_num-1)%sum[floar])+1; //括號里減1最后加1保證值不為0,因為(room_num-1)%sum[floar]≥0且1>0。最后化簡得:若(room_num-1)%sum[floar]=0,整體為1。反之為1。while(room_num>0) {room++;if(room>m) room=0;if(f[floar][room]) room_num--;}floar++;}printf("%d",ans);return 0;
}

  

轉載于:https://www.cnblogs.com/zxjhaha/p/11288386.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/391912.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/391912.shtml
英文地址,請注明出處:http://en.pswp.cn/news/391912.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

修改UITextField中的placeholder的字體

修改字體顏色&#xff1a; [textField setValue:[UIColor redColor] forKeyPath:"_placeholderLabel.textColor"]; 復制代碼 修改字體大小&#xff1a; [textField setValue:[UIFont boldSystemFontOfSize:16] forKeyPath:"_placeholderLabel.font"]; 復…

如何使用Python處理丟失的數據

The complete notebook and required datasets can be found in the git repo here完整的筆記本和所需的數據集可以在git repo中找到 Real-world data often has missing values.實際數據通常缺少值 。 Data can have missing values for a number of reasons such as observ…

MySQL—隔離級別

READ UNCOMMITED(讀未提交) 即讀取到了正在修改但是卻還沒有提交的數據&#xff0c;這就會造成數據讀取的錯誤。 READ COMMITED(提交讀/不可重復讀) 它與READ UNCOMMITED的區別在于&#xff0c;它規定讀取的時候讀到的數據只能是提交后的數據。 這個級別所帶來的問題就是不可…

做虛擬化服務器的配資一致嘛,服務器虛擬化技術在校園網管理中的應用探討.pdf...

第 卷 第 期 江 蘇 建 筑 職 業 技 術 學 院 學 報14 3 Vol.14 曧.3年 月 JOURNAL OF JIANGSU JIANZHU INSTITUTE2014 09 Se .2014p服務器虛擬化技術在校園網管理中的應用探討,汪小霞 江建( , )健雄職業技術學院 軟件與服務外包學院 江蘇 太倉 215411: , ,摘 要 高校校園網數據…

aws中部署防火墻_如何在AWS中設置自動部署

aws中部署防火墻by Harry Sauers哈里紹爾斯(Harry Sauers) 如何在AWS中設置自動部署 (How to set up automated deployment in AWS) 設置和配置服務器 (Provisioning and Configuring Servers) 介紹 (Introduction) In this tutorial, you’ll learn how to use Amazon’s AWS…

Runtime的應用

來自&#xff1a;http://www.imlifengfeng.com/blog/?p397 1、快速歸檔 (id)initWithCoder:(NSCoder *)aDecoder { if (self [super init]) { unsigned int outCount; Ivar * ivars class_copyIvarList([self class], &outCount); for (int i 0; i < outCount; i ) …

使用 VisualVM 進行性能分析及調優

https://www.ibm.com/developerworks/cn/java/j-lo-visualvm/轉載于:https://www.cnblogs.com/adolfmc/p/7238893.html

spring—事務控制

編程式事務控制相關對象 PlatformTransactionManager PlatformTransactionManager 接口是 spring 的事務管理器&#xff0c;它里面提供了我們常用的操作事務的方法。注意&#xff1a; PlatformTransactionManager 是接口類型&#xff0c;不同的 Dao 層技術則有不同的實現類 …

為什么印度盛產碼農_印度農產品價格的時間序列分析

為什么印度盛產碼農Agriculture is at the center of Indian economy and any major change in the sector leads to a multiplier effect on the entire economy. With around 17% contribution to the Gross Domestic Product (GDP), it provides employment to more than 50…

SAP NetWeaver

SAP的新一代企業級服務架構——NetWeaver    SAP NetWeaver是下一代基于服務的平臺&#xff0c;它將作為未來所有SAP應用程序的基礎。NetWeaver包含了一個門戶框架&#xff0c;商業智能和報表&#xff0c;商業流程管理&#xff08;BPM&#xff09;&#xff0c;自主數據管理&a…

NotifyMyFrontEnd 函數背后的數據緩沖區(一)

async.c的 static void NotifyMyFrontEnd(const char *channel, const char *payload, int32 srcPid) 函數中的主要邏輯是這樣的&#xff1a;復制代碼if (whereToSendOutput DestRemote) { StringInfoData buf; pq_beginmessage(&buf, A); //cursor 為 A pq…

最后期限 軟件工程_如何在軟件開發的最后期限內實現和平

最后期限 軟件工程D E A D L I N E…最后期限… As a developer, this is one of your biggest nightmares or should I say your enemy? Name it whatever you want.作為開發人員&#xff0c;這是您最大的噩夢之一&#xff0c;還是我應該說您的敵人&#xff1f; 隨便命名。 …

SQL Server的復合索引學習【轉載】

概要什么是單一索引,什么又是復合索引呢? 何時新建復合索引&#xff0c;復合索引又需要注意些什么呢&#xff1f;本篇文章主要是對網上一些討論的總結。一.概念單一索引是指索引列為一列的情況,即新建索引的語句只實施在一列上。用戶可以在多個列上建立索引&#xff0c;這種索…

leetcode 1423. 可獲得的最大點數(滑動窗口)

幾張卡牌 排成一行&#xff0c;每張卡牌都有一個對應的點數。點數由整數數組 cardPoints 給出。 每次行動&#xff0c;你可以從行的開頭或者末尾拿一張卡牌&#xff0c;最終你必須正好拿 k 張卡牌。 你的點數就是你拿到手中的所有卡牌的點數之和。 給你一個整數數組 cardPoi…

pandas處理excel文件和csv文件

一、csv文件 csv以純文本形式存儲表格數據 pd.read_csv(文件名)&#xff0c;可添加參數enginepython,encodinggbk 一般來說&#xff0c;windows系統的默認編碼為gbk&#xff0c;可在cmd窗口通過chcp查看活動頁代碼&#xff0c;936即代表gb2312。 例如我的電腦默認編碼時gb2312&…

tukey檢測_回到數據分析的未來:Tukey真空度的整潔實現

tukey檢測One of John Tukey’s landmark papers, “The Future of Data Analysis”, contains a set of analytical techniques that have gone largely unnoticed, as if they’re hiding in plain sight.John Tukey的標志性論文之一&#xff0c;“ 數據分析的未來 ”&#x…

spring— Spring與Web環境集成

ApplicationContext應用上下文獲取方式 應用上下文對象是通過new ClasspathXmlApplicationContext(spring配置文件) 方式獲取的&#xff0c;但是每次從容器中獲 得Bean時都要編寫new ClasspathXmlApplicationContext(spring配置文件) &#xff0c;這樣的弊端是配置文件加載多次…

Elasticsearch集群知識筆記

Elasticsearch集群知識筆記 Elasticsearch內部提供了一個rest接口用于查看集群內部的健康狀況&#xff1a; curl -XGET http://localhost:9200/_cluster/healthresponse結果&#xff1a; {"cluster_name": "format-es","status": "green&qu…

Item 14 In public classes, use accessor methods, not public fields

在public類中使用訪問方法&#xff0c;而非公有域 這標題看起來真晦澀。。解釋一下就是&#xff0c;如果類變成public的了--->那就使用getter和setter&#xff0c;不要用public成員。 要注意它的前提&#xff0c;如果是private的class&#xff08;內部類..&#xff09;或者p…

子集和與一個整數相等算法_背包問題的一個變體:如何解決Java中的分區相等子集和問題...

子集和與一個整數相等算法by Fabian Terh由Fabian Terh Previously, I wrote about solving the Knapsack Problem (KP) with dynamic programming. You can read about it here.之前&#xff0c;我寫過有關使用動態編程解決背包問題(KP)的文章。 你可以在這里閱讀 。 Today …