F. Bouncy Ball(Codeforces Round 859 (Div. 4))

题目链接:Problem - F - Codeforcesicon-default.png?t=N2N8https://codeforces.com/contest/1807/problem/F

F. Bouncy Ball(Codeforces Round 859 (Div. 4))_第1张图片

F. Bouncy Ball(Codeforces Round 859 (Div. 4))_第2张图片

题意:给你一个n*m大小的网格,再给你一个起始点和目的点,然后一个起始方向,这个起始点能不能在反弹的过程中到达目标点。反弹的过程中是碰到边界,折射性反弹。

思路:

首先反弹一定是有一个周期的,最多不过n*m.判断如果出现一次周期直接输出“-1”即可,就是不能到达目的点,周期判断就是这个点有没有再次出现并且方向与之前出现的一致,否则是不能够视为周期的。然后就是模拟就行了,不是很难。

AC代码:

#include
#define int long long
using namespace std;
const int N=1e5+10;
map >a;
void solve(){
	a.clear();
	int n,m;
	cin>>n>>m;
	int l,r,ll,rr;
	char aa,bb;
	cin>>l>>r>>ll>>rr>>aa>>bb;
	if(ll==l&&rr==r){
		cout<<0<<"\n";
		return ;
	}
	int sum=0;
	while(1){
		int dx=0,dy=0;
		int flag=0;
		if((aa=='D'&&l1)) dx=-1;
		else if((aa=='D'&&l==n)){
			sum++;
			flag=1;
			dx=-1;
			aa='U';
		}
		if((bb=='L'&&r>1)) dy=-1;
		else if((bb=='R'&&r==m)){
			if(flag==0) sum++;
			flag=1;
			dy=-1;
			bb='L';
		}
		else if((bb=='R'&&r>t;
	while(t--){
		solve();
	}
} 

 

 

你可能感兴趣的:(codefoeces补题,思维题,算法,c++,开发语言)