P6370 [COCI2006-2007#6] KAMEN 题解

原题链接:P6370

思路

题意不多赘述。

首先这道题的 \(60\) 分暴力很好打,直接按题目中的操作做即可,时间复杂度 \(O(nr)\)

考虑优化暴力。我们会发现很多次石头的起始点为同一列的情况,其实每一次下落的轨迹是差不多的。具体来讲应该是第一次下落的轨迹一定包含了后面每一次的轨迹。所以我们可以模拟一个类似于栈的东西 \(s_{i,j}\) 表示起始点在第 \(i\) 列,当前在第 \(j\) 行(即跳过的步数为 \(j\),因为每跳一次一定下落一行)时,当前在 \(s_{i,j}\) 列。那么,对于起始点在每一列的情况,第一次直接暴力将栈填满,之后的每一次再看栈顶的位置合不合法,如果不合法的话就弹出直到合法为止。则栈顶的位置就是这颗石头所在的位置。

因为起始点只可能有 \(O(c)\) 个,且对于每个起始点的暴力操作最多 \(O(rc)\) 次,于是总时间复杂度 \(O(rc^{2}\))。

Code

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define inf 0x3f
#define inf_db 127
#define ls id << 1
#define rs id << 1 | 1
#define re register
#define endl '\n'
typedef pair <int,int> pii;
const int MAXN = 3e4 + 10;
const int MAXM = 30 + 10;
int n,m,q,x,s[MAXM][MAXN],cnt[MAXN];
char c[MAXN][MAXM];
signed main()
{
	scanf("%lld%lld",&n,&m);
	for(int i = 1;i <= n;i = -~i)  scanf("%s",(c[i] + 1)); 
	for(int i = 1;i <= m;i = -~i) c[n + 1][i] = 'X';
	for(int i = 1;i <= m;i++) s[i][++cnt[i]] = i;
	scanf("%lld",&q);
	while(q--)
	{
		scanf("%lld",&x);
		while(true)
		{
			int now = s[x][cnt[x]];
			//x 表示最开始时的列数,now 表示当前的列数(即跳过的步数),cnt[x] 表示当前的行数 
			if(c[cnt[x]][now] == 'O') cnt[x]--;
			else if(cnt[x] >= n) break;
			else if(c[cnt[x] + 1][now] == 'X') break;
			else if(c[cnt[x] + 1][now] == '.') s[x][++cnt[x]] = now;
			else if(c[cnt[x]][now - 1] == '.' && c[cnt[x] + 1][now - 1] == '.') s[x][++cnt[x]] = now - 1;
			else if(c[cnt[x]][now + 1] == '.' && c[cnt[x] + 1][now + 1] == '.') s[x][++cnt[x]] = now + 1;
			else break;
		}
		c[cnt[x]][s[x][cnt[x]]] = 'O';
	}
	for(int i = 1;i <= n;i = -~i) printf("%s\n",(c[i] + 1));
	return 0;
} 

本文作者:Creeper_l

本文链接:https://www.cnblogs.com/Creeperl/p/17913416.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Creeper_l  阅读(11)  评论(0编辑  收藏  举报
  1. 1 イエスタデイ(翻自 Official髭男dism) 茶泡饭,春茶,kobasolo
  2. 2 世间美好与你环环相扣 柏松
  3. 3 True love tired
  4. 4 一笑江湖 (DJ弹鼓版) 闻人听書_
  5. 5 最好的安排 曲婉婷
  6. 6 星星在唱歌 司南
  7. 7 山川 李荣浩
  8. 8 On My Way Alan Walker
  9. 9 百战成诗 王者荣耀·100英雄官方群像献礼歌
  10. 10 雪 Distance Capper / 罗言
  11. 11 Edamame bbno$ / Rich Brian
  12. 12 半生雪 七叔-叶泽浩
  13. 13 Catch My Breath Kelly Clarkson
  14. 14 Love Is Gone SLANDER / Dylan Matthew
  15. 15 Endless Summer Alan Walker / Zak Abel
  16. 16 悬溺 葛东琪
  17. 17 风吹丹顶鹤 葛东琪
  18. 18 Normal No More TYSM
  19. 19 哪里都是你 队长
  20. 20 Stronger Kelly Clarkson
  21. 21 廖俊涛
  22. 22 消愁 毛不易
  23. 23 The Runner Yubik
  24. 24 踏山河 七叔-叶泽浩
  25. 25 Waiting For Love Avicii
  26. 26 在你的身边 盛哲
  27. 27 Dream It Possible Delacey
  28. 28 凄美地 郭顶
  29. 29 满天星辰不及你 ycc
  30. 30 侧脸 于果
  31. 31 阿拉斯加海湾 蓝心羽
  32. 32 虞兮叹 闻人听書_
  33. 33 离别开出花 就是南方凯
  34. 34 盗墓笔记·十年人间 李常超 (Lao乾妈)
哪里都是你 - 队长
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示