CodeForces - 1428D 思维 构造

博客详细介绍了如何解决CodeForces上的问题1428D,涉及回旋镖在遇到障碍物后的转向行为。根据题目条件,地图中每行每列的障碍物数量限制在3个以内,且回旋镖的撞击次数不超过3次。文章探讨了如何在每行每列最多放置两个障碍物的情况下,满足回旋镖的运动规则,并提出了具体的构造策略。
摘要由CSDN通过智能技术生成

回旋镖撞到东西就会右转,给了每列的回旋镖撞几次,构造一个地图,行列障碍物小于3,撞击不超过3
每行每列最多放两个物体,a[i]可能有0,1,2,3;
0:该列不能有物体,忽略
1:该列至少有1个,右面不能有东西,后面的3可能在这上面加所以从下往上排
2:该列有一个而且该行之后的列有一个物体让他再次转向,后面列只能有一个物体,因为这个物体下面还有的话会让他转3次,上面有撞到向下会撞4次以上,从左往右每个2找可以的最左的1,匹配2的话会让这行放3个
3:3可以在没有用过的1,2,3的列反弹,从前往后可能会对后面有干扰,从后往前找3,提示找可以的最左可以用的行;

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
#define re register
using namespace std;
const int N = 300010;
bool f;
int n, a[N], cnt, ansx[N], ansy[N];
bool vis[N];
int row[N], rowcnt; 
signed main() {
   
	cin >> n ;
	for
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值