【纪中受难记】——Day5: 改题好烦

讲真,今天的题真是究极烧脑。

100/0/0/36


 

Description
  请你帮忙设计一个从城市M到城市Z的输油管道,现在已经把整个区域划分为R行C列,每个单元格可能是空的也可能是以下7种基本管道之一:
  

  油从城市M流向Z,‘+’型管道比较特殊,因为石油必须在两个方向(垂直和水平)上传输,如下图所示:

        


  现在恐怖分子弄到了输油管道的设计图,并把其中一个单元格中的管道偷走了,请你帮忙找到偷走的管道的位置以及形状。
 
Input
  第一行包含两个整数R和C(1<=R,C<=25)。
  接下来R行每行C个字符描述被偷之后的形状,字符分为以下三种:
  (1)‘.’表示空;
  (2)字符‘|’(ASCII为124)、‘-’、‘+’、‘1’、‘2’、‘3’、‘4’描述管道的形状;
  (3)‘M’和‘Z’表示城市,两个都是只出现一次。
  输入保证石油的流向是唯一的,只有一个管道跟M和Z相连,除此此外,保证没有多余的管道,也就是说所有的管道在加进被偷的管道后一定都会被用上。
  输入保证有解而且是唯一的。
Output
  输出被偷走的管道的行号和列号以及管道的类型。
 
Sample Input
输入1:
3 7
.......
.M-.-Z.
.......

输入2:
3 5
..1-M
1-+..
Z.23.

输入3:
6 10
Z.1----4..
|.|....|..
|..14..M..
2-+++4....
..2323....
..........
Sample Output
输出1:
2 4 -

输出2:
2 4 4

输出3:
3 3 |

 

水题,记录两个值,一个是当前点,一个是上次经过的点,然后分类讨论即可。


 

1433. 数码问题 (Standard IO)

Time Limits:  1000 ms  Memory Limits: 65536 KB  Detailed Limits  
Goto ProblemSet
Description
  Alice有一个N*N的格子,把1-N^2按照从上到下从左到右的顺序填进表格中,允许在表格上进行两种操作:
  (1) 旋转行——这一行的数向右移动一个位置,而最后一列的数会移到第一列;
  (2) 旋转列——这一列的数向下移动一个位置,最后一行的数会移到第一行。
  Alice想把数X移到(R,C)处可以采用以下方法:
  •如果X不在C这一列,通过旋转行操作把X移到C这一列;
  •如果X不在R这一行,通过旋转列操作把X移到R这一行。
  下面是一个把6移到(3,4)的例子:
  
  Alice现在想采用上述方法,依次把K个数移到各自的目标位置,编程计算每个数需要几次操作。
 
Input
  第一行包含两个整数N(12<=N<=10000)和K(1<=K<=1000)。
  接下来K行,每行包含三个整数X(1<=X<=N^2)、R和C(1<=R,C<=N),描述需要移动的数以及目标位置。
  Alice必须按照输入顺序依次移动。
Output
  输出K行,每行输出一个整数,表示操作次数。
 
Sample Input
输入1:
4 1
6 3 4

输入2:
4 2
6 3 4
6 2 2

输入3:
5 3
1 2 2
2 2 2
12 5 5
Sample Output
输出1:
3

输出2:
3
5

输出3:
2
5
3

 

  这道题最恶心的地方在于如何确定一个点未来的位置在哪里,假设我们某次操作移动了点(x1,y1)至(x2,y2),那么先向右移动了(n+y2-y1)%n步,同时第x1行上所有点都向右移动这么多步,此时向下移动(n+x2-x1)%n步,第y2列上的数同时往下移动这么多步,也就是说未来处在(x1,y)的点坐标会变为(x1,y+(n+y2-y1)%n).

但是如果我们把每一次移动对应的行和列都记下,对于一个点给他重现一遍,我们就知道它未来的位置了。


1434. 灌水 (Standard IO)

Time Limits:  1000 ms  Memory Limits: 65536 KB  Detailed Limits  
Goto ProblemSet
Description
  学生都很喜欢灌水,第一天只有Alice给她的每个朋友灌了一次水,从第二天开始,所有学生(包括Alice)将会有规律地去灌水:
  •如果前一天被灌了奇数次的水,他们将会给每个朋友灌一次水;
  •如果前一天被灌了偶数次的水,他们将会给每个朋友灌两次水。
  学生编号为1到N,Alice为1号,学生之间的朋友关系会给出。
  计算H天后一共灌了几次水。
 
Input
  输入一行包含两个整数N和H(1<=N<=20,1<=H<=10^9),表示学生数和天数。
  接下来N行,每行包含N个‘0’或‘1’,(A,B)处的字符表示A和B的关系,‘1’表示是朋友关系,‘0’表示不是。注意自己和自己不是朋友关系,输入保证该矩阵是对称的。
Output
  输出H天后一共灌水的数量。
 
Sample Input
输入1:
4 1
0110
1001
1001
0110

输入2:
4 2
0110
1001
1001
0110

输入3:
5 3
01000
10110
01000
01001
00010
Sample Output
输出1:
2

输出2:
14

输出3:
26
 
Data Constraint
 
 
Hint
【样例解释】
  样例2中,第一天Alice灌了2次水,第二天学生1和学生4给学生2和学生3都灌了2次水,而学生2和学生3给学生1和学生4各灌水1次,2天一共灌了12次水。
【数据范围】
  50%的数据 H<=1000。

这题数据疯狂暗示你找循环节。

正解就是先模拟一遍每一天的灌水情况,直到找到循环节,记录一下循环节,其他的信息只要跳过循环节再加上一部分就可以了。


1435. 开花 (Standard IO)

Time Limits:  1000 ms  Memory Limits: 65536 KB  Detailed Limits  
Goto ProblemSet
Description
  在遥远的火星上,上面的植物非常奇怪,都是长方形的,每个植物用三个数来描述:左边界L、右边界R以及高度H,如下图所示描述一个植物:L=2,R=5和H=4。
  
  每天都有一个新植物长出来,第一天的植物高度为1,后面每天长出的植物比前一天的高1。
  当一个新植物长出来的时候,跟其他植物的水平线段相交处会长出一朵小花(前提是之前没有长出花朵),如果线段交于端点,是不会长花的。
  下图为样例1的示意图:
  

  给出每天的植物的坐标,计算每天长出多少新花。
 
Input
  第一行包含一个整数N(1<=N<=100000),表示天数。
  接下来N行,每行两个整数L和R(1<=L<=R<=100000),表示植物的左右边界。
Output
  输出每天长出新植物后增加新花的数量。
 
Sample Input
输入1:
4
1 4
3 7
1 6
2 6

输入2:
5
1 3
3 5
3 9
2 4
3 8
Sample Output
输出1:
0
1
1
2

输出2:
0
0
0
3
2

说到开花,花是植物,植物需要水,所以这是一道水题,不多说了,用线段树维护答案即可。


总结:很弱,以后还要加油。

转载于:https://www.cnblogs.com/Nelson992770019/p/11303802.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值