您当前的位置: 首页 > 

MangataTS

暂无认证

  • 0浏览

    0关注

    423博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

AcWing 1929. 镜子田地(DFS)

MangataTS 发布时间:2022-02-06 20:46:25 ,浏览量:0

题面连接

https://www.acwing.com/problem/content/description/1931/

思路

因为光路可逆,那么对于每一个点的方向就是固定的,也就是入射角和反射角,那么对于每一个点的走向我们都是可以提前预知的,所以我们直接对每个外圈点进行DFS搜索即可,只不过需要注意一点我们要有一个变量d来表示朝向,因为光在不同的方向入射,那么其出射方向也不同,我们这里用0表示向上、1表示向右、2表示向下、3表示向左,那么我们会发现,如果下一个点是 '/'的话

  • 入射方向是0那么出射方向就会变成1
  • 入射方向是1那么出射方向就会变成0
  • 入射方向是2那么出射方向就会变成3
  • 入射方向是3那么出射方向就会变成2

那么对于另一种镜子也就同理了,所以直接对外圈的每一个点DFS就好了

代码
#include
using namespace std;
//----------------自定义部分----------------
#define ll long long
#define mod 1000000007
#define endl "\n"
#define PII pair
#define INF 0x3f3f3f3f

int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};

ll ksm(ll a,ll b) {
	ll ans = 1;
	for(;b;b>>=1LL) {
		if(b & 1) ans = ans * a % mod;
		a = a * a % mod;
	}
	return ans;
}

ll lowbit(ll x){return -x & x;}

const int N = 1e3+10;
//----------------自定义部分----------------
int n,m,q,a[N];
char mp[N][N];

int dfs(int x,int y,int d){
	if(x >= n || y >= m || x n>>m;
	getchar();
	for(int i = 0;i >mp[i];
	}
	for(int i = 0;i             
关注
打赏
1665836431
查看更多评论
0.1054s