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的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫 ...
随机推荐
- RS chap1:好的推荐系统
一.什么是推荐系统 1.个性化推荐系统:从庞大的电影库中找几部符合你兴趣的电影供你选择. 2.推荐系统是帮助用户快速发现有用信息的工具.和搜索引擎不同的是,推荐系统不需要用户提供明确的需求,而是通过分 ...
- 关于Vue父子组件传值(复杂数据类型的值)的细节点
vue 父子组件传值是很常见的,多数情况下都是父传递给子的值是基础数据类型,如string,number,boolean, 当父组件值被修改时,子组件能够实时的作出改变. 如果父子传值的类型是复杂数据 ...
- iOS蓝牙中的进制转换,数据格式转换
最近在忙一个蓝牙项目,在处理蓝牙数据的时候,经常遇到进制之间的转换,蓝牙处理的是16进制(NSData),而我们习惯的计数方式是10进制,为了节省空间,蓝牙也会把16进制(NSData)拆成2进制记录 ...
- Spring Boot 学习杂记
使用IntelliJ IDEA构建Spring Initializr
- 英特尔的Gen11集成显卡性能再次发力
这是英特尔首个达到 1 TeraFLOP 算力的图形模块,与第九代酷睿移动版的性能相比,15W Ice Lake-U 在游戏测试场景中,平均帧速率的性能提升了 40%. 与同等的 AMD 产品相比,英 ...
- Linux学习--第十三天--日志、系统运行级别、grub加密
日志 rsyslogd取代了syslogd. /var/log/cron #定时任务相关日志 /var/log/cups #打印信息相关日志 /var/log/dmesg #开机内核自检相关日志,dm ...
- 在VMware Vcenter添加一块网卡后,启动虚机找不到网卡,发现有一个ens38(redhat7.5)
添加一块网卡后,启动虚机找不到网卡,发现有一个ens38 问题:新建虚拟机设置为一块网卡,时候在Vcenter再添加一块网卡,这个问题相信很多网友都见过,今天就来总结一下添加过程中的问题. 由于有以前 ...
- hdu 6205 card card card 最大子段和
#include<iostream> #include<deque> #include<memory.h> #include<stdio.h> #inc ...
- Mac下安装nginx并配置SSL实现Https的访问
一.nginx安装 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/insta ...
- VC内联汇编和GCC内联汇编的语法区别
VC: #include <stdio.h> main(){ int a = 1; int b = 2; int c; __asm{ mov eax,a mov ebx,b mov ecx ...