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的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫 ...
随机推荐
- 088、Docker 如何支持多种日志方案 (2019-05-10 周五)
参考https://www.cnblogs.com/CloudMan6/p/7762369.html 将容器日志发送到 STDOUT 和 STDERR 是Docker 的默认日志行为.实际上,Do ...
- oracle常用函数(2)
1) trunc函数,用于截断数字, 截断数字,用法为:trunc(n1,n2),n1表示要被截断的数字,n2表示要截断到那位,但是不会进行四舍五入. n2还可以表示负数,表示截断到小数点前,意思就是 ...
- 关于Vue父子组件传值(复杂数据类型的值)的细节点
vue 父子组件传值是很常见的,多数情况下都是父传递给子的值是基础数据类型,如string,number,boolean, 当父组件值被修改时,子组件能够实时的作出改变. 如果父子传值的类型是复杂数据 ...
- SpringBoot打包成jar运行脚本
#!/bin/bash #这里可替换为你自己的执行程序,其他代码无需更改 APP_NAME=csadmin.jar #使用说明,用来提示输入参数 usage(){ echo "Usage: ...
- 转载:一种云环境下SaaS软件部署方法及装置与流程
转载:http://www.xjishu.com/zhuanli/55/201710103925.html 本发明涉及云计算技术领域,特别是涉及一种云环境下SaaS软件部署方法及装置. 背景技术: 随 ...
- Laravel5如何向闭合函数内传递参数 where function 传参
如上,怎么将$title 像$query一样,在函数内部使用? $result = UserMenus::with(['menu'=>function($query){ $query->w ...
- matlab 中figure的图像 抗锯齿
linehandle = plot(xxxxxx); set( linehandle, 'linesmoothing', 'on' );
- Python socket服务
套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开.读写和关闭等操作. 1. 实现客户端发送字符,服务器返回大写的字符: 服务器: import soc ...
- tp5.1中的命名规范
类里边用驼峰(类名首字母大写,属性和方法首字母小写) 类名:User,UserType 类中的属性和方法:getUserName(),tableName,instance 参数.数据表和字段 用小写字 ...
- LOJ-6278-数列分块入门2(分块)
链接: https://loj.ac/problem/6278 题意: 给出一个长为 的数列,以及 个操作,操作涉及区间加法,询问区间内小于某个值 的元素个数. 思路: 分块,用vector维护每个区 ...