P1076 寻宝
P1076 寻宝
题解
这道题真是感人啊,废了蒟蒻一天的时间
关键
1.
a[ k ][ ] 数组记录第k层有楼梯房间的编号
a[ k ][ 0 ] 第k层有几个有楼梯的房间
a[ k ][ i ] 第k层第 i 个有楼梯的房间
每层记录每一个房间的下一个有楼梯的房间,在后面牵扯到 x 的运算时会用到
也就是
2.这里讲一下 x 的处理:
因为 x 可能会很大,所以要处理一下,防止没用的跑很多圈,

简化为 (x-1)%y+1
如果 x%y=0的话,酱紫就会得到正确的结果(非0)
如果 x%y!=0的话,结果还是 x%y 啊
为什么要%y再+1呢?
其实就是相当于把取模后的值从 0,1,2,3,.....,y-1,变成了 1,2,3,4,.....,y,也就是不会出现0
为什么要(x-1)呢??
如果不先 -1 ,后面+1之后结果就不一样了
for example:
(10-1)%3+1=10%3=1
这里加上一个题目 也是运用了一下这样的处理方法:
P2615 神奇的幻方
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<queue> using namespace std; typedef long long ll; inline int read()
{
int ans=;
char last=' ',ch=getchar();
while(ch<''||ch>'') last=ch,ch=getchar();
while(ch>=''&&ch<='') ans=ans*+ch-'',ch=getchar();
if(last=='-') ans=-ans;
return ans;
} int n,x,y;
int tu[][]; int main()
{
// freopen("data.txt","r",stdin);
// freopen("yy.txt","w",stdout); n=read();
x=;y=(n+)/;
tu[x][y]=; for(int i=;i<=n*n;i++)
{
int xx,yy;
xx=((x-)-+n)%n+;
yy=((y+)-+n)%n+;
// xx=x-1;if(xx<1) xx=n;
// yy=y+1;if(yy>n) yy=1;
if(!tu[xx][yy]){
tu[xx][yy]=i;
x=xx;y=yy;
continue;
}
else{
xx=((x+)-+n)%n+;
// xx=x+1;if(xx>n) xx=1;
yy=y;
tu[xx][yy]=i;
x=xx;y=yy;
}
} for(int i=;i<=n;i++){
for(int j=;j<=n;j++)
printf("%d ",tu[i][j]);
printf("\n");
} return ;
}
Code
代码
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstdlib> using namespace std; const int mod=;
int n,m,start,ans,b,c;
int a[][];
struct node
{
int num;
int flag;
int next;
}room[][]; int main()
{
memset(a,-,sizeof(a));
scanf("%d%d",&n,&m); for(int i=;i<=n;i++)
{
a[i][]=; //初始化记录每层有几个楼梯
int ge=; //每层楼梯个数,初始化0
for(int j=;j<m;j++)
{
scanf("%d%d",&room[i][j].flag,&room[i][j].num);
room[i][j].next =-;
if(room[i][j].flag )
{
a[i][]++;
a[i][++ge]=j; //第i层第ge个有楼梯的房间编号为j
}
}
}
scanf("%d",&start); //记录每个房间下一个有楼梯房间的编号
for(int i=;i<=n;i++)
{
int ge=;
for(int j=;j<m;j++)
{
if(room[i][j].flag ) ge++; if(ge==a[i][]) room[i][j].next =a[i][]; //最后一个和第一个连起来
else room[i][j].next =a[i][ge+];
}
} for(int i=;i<=n;i++)
{
ans=(ans+room[i][start].num )%mod; int mp=(room[i][start].num-1)%a[i][0]+1; //看关键2 int tim=;
if(room[i][start].flag) tim++; while(tim<mp)
{
start=room[i][start].next;
tim++;
} } printf("%d\n",ans); return ;
}
P1076 寻宝的更多相关文章
- 洛谷 P1076 寻宝 解题报告
P1076 寻宝 题目描述 传说很遥远的藏宝楼顶层藏着诱人的宝藏.小明历尽千辛万苦终于找到传说中的这个藏宝楼,藏宝楼的门口竖着一个木板,上面写有几个大字:寻宝说明书.说明书的内容如下: 藏宝楼共有\( ...
- 洛谷P1076 寻宝
寻宝 模拟加优化,细节比较重要. 我们用ti[i]表示i这一层有楼梯的个数,然后我们把当前1号点的数据mod上ti[i],然后使该数不能等于0,就行了. #include <bits/stdc+ ...
- 洛谷 P1076 寻宝(模拟 && 剪枝)
嗯... 题目链接:https://www.luogu.org/problem/P1076 这道题的题意首先太难理解...并且细节太多... 可以用b[i][j]记录每个指示牌上的数字,a[i][j] ...
- 洛谷 P1076 寻宝 题解
今天又TM考试了...... 这是T1,然后我模拟20分滚粗. Analysis 在每层的时候用编号%这层可以上楼的房间个数就行了. #include<iostream> #include ...
- P1076寻宝
---恢复内容开始--- 这是2012noip普及组的一个模拟题,第一次得了50,看了题解后剪枝拿到100. N层楼,m个房间,逆时针排序.每个房间有一个指示牌,也可能有楼梯,找到第(上楼的第一个房间 ...
- 【NOIP2012普及组】寻宝
这道实际难度入门的题做得真™要麻烦死我,由于摸不到电脑,在大脑里调了3天都翻不转!! P1076 寻宝 思路:暴力模拟(这是基础,单纯暴力据说会全部TLE)+取模优化(这样时间复杂度骤降到O(NM)) ...
- 2019.7.12 sdfzoier做题统计
lixf_lixf :9 P1981 表达式求值 P1076 寻宝 P1199 三国游戏 P1308 统计单词数 P1190 接水问题 P1158 导弹拦截 P1070 道路游戏 P1069 细胞分裂 ...
- [BZOJ3991][SDOI2015]寻宝游戏
[BZOJ3991][SDOI2015]寻宝游戏 试题描述 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以任意选择 ...
- nyoj 82 迷宫寻宝(一)
点击打开链接 迷宫寻宝(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫 ...
随机推荐
- php-fpm内存泄漏问题排查
生产环境内存泄漏问题排查,以下是排查思路 生产环境上有严重的内存溢出问题(红色框所示,正常值应为是 20M 左右)同时系统有 Core Dump 文件产生排查过程中还发现一个现象,如果关闭 OPc ...
- Vue安装与简单使用
Vue入门 使用Typora打开https://pan.baidu.com/s/1Mf3ZFSthdVUQevqWr777eA 提取码: hg9b vue中文官网教学 安装与使用,我也经常看这个 点击 ...
- SOA架构简介
一. 什么是SOA 架构 SOA是一种架构模型,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署.组合和使用.服务层是SOA的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的 ...
- Linux下安装升级python
本文主要是参考帖子,感谢这位博主,我主要是对相关操作进行补充和说明. 本文主要是在linux(centos)下安装Python3.7.1 1.下载安装Python-3.7.1 1) 下载Python- ...
- Linux学习之CentOS(二十六)--Linux磁盘管理:LVM逻辑卷的创建及使用
在上一篇随笔里面 Linux学习之CentOS(二十五)--Linux磁盘管理:LVM逻辑卷基本概念及LVM的工作原理,详细的讲解了Linux的动态磁盘管理LVM逻辑卷的基本概念以及LVM的工作原理, ...
- mariadb增删改查
数据库用户的操作 登录前需先启动3306端口. 首次启动需初始化数据库 mysql_secure_installation 增/改: 创建用户及赋予用户指定权限 grant 权限(分为create[创 ...
- 接口测试参数化详解(Jmeter)
简介 接口测试是目前最主流的自动化测试手段,它组合不同的参数向服务器发送请求,接受和解析响应结果,通过测试数据的交换逻辑来验证服务端程序工作的正确性.我们在测试过程中需要考虑不同的输入组合,来覆盖不同 ...
- Mvc Excel导入加事务加导出
导出 public FileResult Input() { DataTable dt = new DataTable("dd"); using (SqlConnection co ...
- CentOS6.X系统启动流程
1.硬件启动阶段 BIOS自检 BIOS的功能由两部分组成,分别是POST码和Runtime服务.POST阶段完成后它将从存储器中被清除,而Runtime服务会被一直保留,用于目标操作系统的启动.B ...
- for循环与内置方法详解
''' for循环与内置方法详解 ''' # 循环:重复(按照某种规律的)做一件事情 # lt = [1, 2, 3, 4] # # ind = 0 # # while True: # print(l ...