Codeforces 97D Robot in Basement bitset+模拟

题目链接:点击打开链接

题意:

每个点有一个机器人(.),下面是一些指令,每次发出指令(一个字母)所有机器人都会执行移动。

当机器人到E点就会离开。

若机器人前方是‘#‘ 或者边界则停留原地。一个方格可以站多个机器人。

bitset模拟。。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <bitset>
using namespace std;
char s[100005];
int n, m, k;
int work(){
	bitset<23000> a, b, c, e;
	for(int i = 0; i < n; i++)
	{
		scanf("%s", s);
		for(int j = 0; j < m; j++)
		{
			(s[j]=='#'?b:a).set(i*m+j);
			(s[j]=='E'?e.set(i*m+j):0);
		}
	}
	scanf("%s", s);
	c = a;
	for(int i = 0; i < k; i++)
	{
		if(c==e)return i;
		if(s[i]=='U') c = ((c>>m)&a) | (c&(b<<m));
		if(s[i]=='L') c = ((c>>1)&a) | (c&(b<<1));
		if(s[i]=='D') c = ((c<<m)&a) | (c&(b>>m));
		if(s[i]=='R') c = ((c<<1)&a) | (c&(b>>1));
	}
	if(c==e)return k;
	return -1;
}
int main(){
	int i, j;
	while (~scanf("%d %d %d", &n, &m, &k)){
		printf("%d\n", work());
	}
	return 0;
}

Codeforces 97D Robot in Basement bitset+模拟

时间: 2024-10-12 18:51:30

Codeforces 97D Robot in Basement bitset+模拟的相关文章

Codeforces 12D Ball 树状数组模拟3个元素的排序

题目链接:点击打开链接 #include<stdio.h> #include<iostream> #include<string.h> #include<set> #include<vector> #include<map> #include<math.h> #include<queue> #include<string> #include<stdlib.h> #include<a

codeforces 459C Pashmak and Buses(模拟,组合数A)

题目 跑个案例看看结果就知道了:8 2 3 题目给的数据是 n,k,d 相当于高中数学题:k个人中选择d个人排成一列,有多少种不同的方案数,列出其中n中就可以了. #include<iostream> #include<algorithm> #include<string> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h>

Codeforces 309C Memory for Arrays 二进制模拟进位

题目链接:点击打开链接 题意: 给定n个箱子m个物品 下面n个数字表示箱子的容量 下面m个数字b1-bm 表示物品体积为2^bi大 问最多有多少个物品可以放入箱子. 思路: 贪心,先放小的,小的不能放再放大的 显然我们把n个箱子拆成二进制,然后模拟二进制减法运算. 剩下就是简单模拟 #include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> #include<m

CodeForces 388A Fox and Box Accumulation (模拟)

A. Fox and Box Accumulation time limit per test:1 second memory limit per test:256 megabytes Fox Ciel has n boxes in her room. They have the same size and weight, but they might have different strength. The i-th box can hold at most xi boxes on its t

Codeforces 46D Parking Lot(贪心模拟)

Codeforces 46D Parking Lot 题目链接 开线段树专题开出了这题..看似要用区间合并求连续最大区间,其实不需要.因为询问才100个,直接set暴力去模拟即可,每次车进来就从左往右找到一个合适位置 代码: #include <cstdio> #include <cstring> #include <set> using namespace std; const int N = 100005; int L, b, f, n; set<int>

CodeForces - 7A Kalevitch and Chess(搜索?!模拟!)

Kalevitch and Chess Time Limit: 2000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u Submit Status Description A famous Berland's painter Kalevitch likes to shock the public. One of his last obsessions is chess. For more than a thousand ye

Codeforces 475C Kamal-ol-molk&amp;#39;s Painting 模拟

主题链接:点击打开链接 意甲冠军:特定n*m矩阵 X代表色 .代表无色 随着x*y形刷子去涂色. 刷子每次能够→或↓移动随意步. 若可以染出给定的矩阵,则输出最小的刷子的面积 若不能输出-1 思路: 先找到连续最小的x,y 由于至少一个边界和x或y相等,所以枚举(x,i) 和 (i,y)就能够了. #pragma comment(linker, "/STACK:102400000,102400000") #include <stdio.h> #include <ios

CodeForces - 670D1 Magic Powder - 1 (模拟)

CodeForces - 670D1 Magic Powder - 1 Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Status Description This problem is given in two versions that differ only by constraints. If you can solve this problem in large c

Codeforces #366 Div. 2 C. Thor (模拟

http://codeforces.com/contest/705/problem/C 题目 模拟题 : 设的方法采用一个 r 数组(第几个app已经阅读过的消息的数量),和app数组(第几个app发出的消息的总数),加上一个 q 队列. 思路: 查询==1的时候,入队(记录顺序), sum++ (sum 为全部的剩余 没阅读的数量) 查询==2的时候,针对一个app,sum -(这个app发出的消息的总数 - 这个app已经阅读过的消息的数量),然后用 app数组 更新 r 数组,表示这个ap