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 寻宝的更多相关文章

  1. 洛谷 P1076 寻宝 解题报告

    P1076 寻宝 题目描述 传说很遥远的藏宝楼顶层藏着诱人的宝藏.小明历尽千辛万苦终于找到传说中的这个藏宝楼,藏宝楼的门口竖着一个木板,上面写有几个大字:寻宝说明书.说明书的内容如下: 藏宝楼共有\( ...

  2. 洛谷P1076 寻宝

    寻宝 模拟加优化,细节比较重要. 我们用ti[i]表示i这一层有楼梯的个数,然后我们把当前1号点的数据mod上ti[i],然后使该数不能等于0,就行了. #include <bits/stdc+ ...

  3. 洛谷 P1076 寻宝(模拟 && 剪枝)

    嗯... 题目链接:https://www.luogu.org/problem/P1076 这道题的题意首先太难理解...并且细节太多... 可以用b[i][j]记录每个指示牌上的数字,a[i][j] ...

  4. 洛谷 P1076 寻宝 题解

    今天又TM考试了...... 这是T1,然后我模拟20分滚粗. Analysis 在每层的时候用编号%这层可以上楼的房间个数就行了. #include<iostream> #include ...

  5. P1076寻宝

    ---恢复内容开始--- 这是2012noip普及组的一个模拟题,第一次得了50,看了题解后剪枝拿到100. N层楼,m个房间,逆时针排序.每个房间有一个指示牌,也可能有楼梯,找到第(上楼的第一个房间 ...

  6. 【NOIP2012普及组】寻宝

    这道实际难度入门的题做得真™要麻烦死我,由于摸不到电脑,在大脑里调了3天都翻不转!! P1076 寻宝 思路:暴力模拟(这是基础,单纯暴力据说会全部TLE)+取模优化(这样时间复杂度骤降到O(NM)) ...

  7. 2019.7.12 sdfzoier做题统计

    lixf_lixf :9 P1981 表达式求值 P1076 寻宝 P1199 三国游戏 P1308 统计单词数 P1190 接水问题 P1158 导弹拦截 P1070 道路游戏 P1069 细胞分裂 ...

  8. [BZOJ3991][SDOI2015]寻宝游戏

    [BZOJ3991][SDOI2015]寻宝游戏 试题描述 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以任意选择 ...

  9. nyoj 82 迷宫寻宝(一)

    点击打开链接 迷宫寻宝(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫 ...

随机推荐

  1. ArcGIS 在VS2010中 ESRI.ArcGIS.SOESupport.dll 无法正常加载的处理

    转自  http://blog.csdn.net/tnt123688/article/details/23186973 问题描述: 打开ArcGIS的SOE模板后,提示  错误 命名空间“ESRI.A ...

  2. 在docker容器下利用数据卷实现在删除了mysql容器或者镜像的情况下恢复数据

    当把mysql容器销毁,在新建一个容器,进行之前的数据恢复. 因为之前建立了数据卷,那么现在就可以利用这个数据卷进行数据恢复. 使用docker volume create volume_name命令 ...

  3. 2018.09.07 最新cocoapods安装流程

    这篇写在简书了,就不费力气搬了,给简书留一篇. https://www.jianshu.com/p/13bbbf804b71

  4. MySQL下载~安装教程~这里示例 MySQL 8.0 Command Line Client

    打开 https://www.mysql.com 也可以选择我分享的百度网盘文件 MySQL8.0.16.0 安装包 https://pan.baidu.com/s/1U8DkyJVp9Zvx7Zok ...

  5. linux命令详解——ln

    ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln -s 源文件 目标文件. 当我们需要在不同的目录,用到相同的 ...

  6. laravel查询数据库获取结果如何判断是否为空?

    laravel 查询数据库获取结果如何判断是否为空? 大家使用的场景是这样的: 1 $users = DB::table('users')->where('id',$id)->get(); ...

  7. SIP协议 会话发起协议(二)

    SIP - 响应码 SIP响应是由用户代理服务器(UAS)或SIP服务器生成的用于回复客户端生成的请求的消息.这可能是一个正式的确认,以防止UAC转发请求. 响应可能包含UAC所需的一些额外的信息头字 ...

  8. Codeforces Round #575 (Div. 3) D1+D2. RGB Substring (easy version) D2. RGB Substring (hard version) (思维,枚举,前缀和)

    D1. RGB Substring (easy version) time limit per test2 seconds memory limit per test256 megabytes inp ...

  9. caffe py3 docker

    https://hub.docker.com/r/mapler/caffe-py3/ docker pull mapler/caffe-py3 docker run  -it  mapler/caff ...

  10. SpringMVC @PathVariable注解

    下面用代码来演示@PathVariable传参方式 @RequestMapping("/user/{id}") public String test(@PathVariable(& ...