当前位置: 首页 > news >正文

题解:CF2118D1 Red Light, Green Light (Easy version)

题目传送门

注意到数据很小只有 \(500\),所以想到可以模拟加记忆化,每一次暴力的去找到下一个要到的红绿灯的编号,再判断是红灯还是绿灯,如果是绿灯那方向不变,编号根据方向判定是加一还是减一,若果是红灯那方向改变,编号同理,同时用数组记录一下这一次遇到红灯的状态,三个状态分别为:编号,方向和时间,如果在模拟过程中编号小于 \(1\) 或编号大于 \(n\) 那么说明可以走出去,若果两次走到同一个状态,那么就不可能走出去。


code

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1010101;
ll n,k,T,x,q,p[N],d[N],vis[510][3][510];
int main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>T;while(T--){cin>>n>>k;for(int i=1;i<=n;i++)cin>>p[i];for(int i=1;i<=n;i++)cin>>d[i];cin>>q;while(q--){cin>>x;memset(vis,0,sizeof(vis));ll cnt=0,flag=1,now=0;for(int i=1;i<=n;i++){if(p[i]>=x){now=i;break;}}if(now==0){cout<<"YES\n";continue;}while(1){if((cnt+abs(p[now]-x)-d[now])%k!=0){cnt+=abs(p[now]-x);x=p[now];if(flag)now++;else now--;if(now>n||now<1){cout<<"YES\n";break;}}else{if(vis[now][flag][(cnt+abs(p[now]-x)-d[now])%k]){cout<<"NO\n";break;}vis[now][flag][(cnt+abs(p[now]-x)-d[now])%k]=1;cnt+=abs(p[now]-x);x=p[now];if(flag)now--;else now++;if(now>n||now<1){cout<<"YES\n";break;}flag^=1;}}}}return 0;
}
http://www.wxhsa.cn/company.asp?id=586

相关文章:

  • Project Euler题解思路导航(私人)
  • 27届春招备战一轮复习--第五期
  • 阅读方式
  • Audition 2025(AU2025)超详细直装版下载安装教程保姆级
  • pg 解析select语句的返回值
  • 长乐一中 CSP-S 2025 提高级模拟赛 Day2
  • 费用流
  • [豪の学习笔记] 软考中级备考 基础复习#6
  • RAG
  • 手撕深度学习:矩阵求导链式法则与矩阵乘法反向传播公式,深度学习进阶必备!
  • CF *3200
  • 分享我在阿贝云使用免费虚拟主机的真实体验!
  • 软件测试工程师的职业天花板在哪里?如何突破?
  • 02020213 .NET Core重难点知识13-配置日志邮件服务案例、DI读取、DI与扩展方法、VS配置项目环境变量
  • GJOI 模拟赛题记录声明
  • Ubuntu 卸载 Firefox 浏览器
  • 录无法修改OneDrive文件的解决方法
  • 量子机器学习入门:三种数据编码方法对比与应用
  • 向量数据库
  • UGNX2506下载和安装教程包含激活教程步骤(超详细保姆级图文UGNX安装步骤)
  • ansible剧本
  • uniapp插件开发
  • 【模板】平面最近点对
  • npx playwright install chromium 安装失败,如何离线安装
  • Power BI制作指标达成跟踪器
  • 软件工程第一次作业
  • 一个基于 .NET 开源、轻便的 Windows 优化工具,适用于 Win7 - Win11 最新版的优化!
  • 两种求快速幂的方法
  • 杂题20250909-
  • LLM2