Problem Statement

Takahashi is at the origin of a two-dimensional plane.

Takahashi will repeat teleporting $N$ times. In each teleportation, he makes one of the following moves:

  • Move from the current coordinates $(x,y)$ to $(x+A,y+B)$
  • Move from the current coordinates $(x,y)$ to $(x+C,y+D)$
  • Move from the current coordinates $(x,y)$ to $(x+E,y+F)$

There are obstacles on $M$ points $(X_1,Y_1),\ldots,(X_M,Y_M)$ on the plane; he cannot teleport to these coordinates.

How many paths are there resulting from the $N$ teleportations? Find the count modulo $998244353$.

Constraints

  • $1 \leq N \leq 300$
  • $0 \leq M \leq 10^5$
  • $-10^9 \leq A,B,C,D,E,F \leq 10^9$
  • $(A,B)$, $(C,D)$, and $(E,F)$ are distinct.
  • $-10^9 \leq X_i,Y_i \leq 10^9$
  • $(X_i,Y_i)\neq(0,0)$
  • $(X_i,Y_i)$ are distinct.
  • All values in input are integers.

Input

Input is given from Standard Input in the following format:

$N$ $M$
$A$ $B$ $C$ $D$ $E$ $F$
$X_1$ $Y_1$
$X_2$ $Y_2$
$\vdots$
$X_M$ $Y_M$

Output

Print the answer.


Sample Input 1

2 2
1 1 1 2 1 3
1 2
2 2

Sample Output 1

5

The following $5$ paths are possible:

  • $(0,0)\to(1,1)\to(2,3)$
  • $(0,0)\to(1,1)\to(2,4)$
  • $(0,0)\to(1,3)\to(2,4)$
  • $(0,0)\to(1,3)\to(2,5)$
  • $(0,0)\to(1,3)\to(2,6)$

Sample Input 2

10 3
-1000000000 -1000000000 1000000000 1000000000 -1000000000 1000000000
-1000000000 -1000000000
1000000000 1000000000
-1000000000 1000000000

Sample Output 2

0

Sample Input 3

300 0
0 0 1 0 0 1

Sample Output 3

292172978

有三种步伐,发现我们在坐标系上很难 dp。因为只有三种移动方式,所以我们考虑 dp 每种操作了多少次。

为了 \(O(1)\) 判断,我们可以把所有不能走的坐标用哈希表存起来。

定义 \(dp_{i,j,k}\) 为第一中移动方式移动了 \(i\) 次,第二种移动方式移动了 \(j\) 次第三种移动方式移动了 \(k\) 次的情况下,有多少种方案。

首先在哈希表上查一下这样子到达的点是否可以走,如果可以走,\(dp_{i,j,k}=dp_{i-1,j,k}+dp_{i,j-1,k}+dp_{i,j,k-1}\)

#include<cstdio>
const int N=305,S=2e9+1,P=998244353,mod=1e7+3;
typedef long long LL;
int n,m,a,b,c,d,e,f,dp[N][N][N];
LL hs[mod],ans,x,y;
LL hsh(int x,int y)
{
return 1LL*(x+S-1)*S+y+S;
}
void insert(LL a)
{
for(int i=a%mod;;i++)
{
if(i==mod)
i=0;
if(!hs[i])
{
hs[i]=a;
break;
}
}
}
int find(LL a)
{
for(int i=a%mod;;i++)
{
if(i==mod)
i=0;
if(!hs[i])
return 0;
if(hs[i]==a)
return 1;
}
}
LL tx(int x,int y,int z)
{
return 1LL*x*a+1LL*y*c+1LL*z*e;
}
LL ty(int x,int y,int z)
{
return 1LL*x*b+1LL*y*d+1LL*z*f;
}
int main()
{
scanf("%d%d%d%d%d%d%d%d",&n,&m,&a,&b,&c,&d,&e,&f);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
insert(hsh(x,y));
}
dp[0][0][0]=1;
for(int i=0;i<=n;i++)
{
for(int j=0;j+i<=n;j++)
{
for(int k=0;k+j+i<=n;k++)
{
x=tx(i,j,k),y=ty(i,j,k);
if(x<-1e9||x>1e9||y<-1e9||y>1e9||!find(hsh(x,y)))
{
if(i)
dp[i][j][k]=dp[i-1][j][k];
if(j)
dp[i][j][k]=(dp[i][j][k]+dp[i][j-1][k])%P;
if(k)
dp[i][j][k]=(dp[i][j][k]+dp[i][j][k-1])%P;
}
if(i+j+k==n)
ans=(ans+dp[i][j][k])%P;
// printf("%lld %lld %d %d %d %d\n",x,y,i,j,k,dp[i][j][k]);
}
}
}
printf("%d",ans);
return 0;
}

[ABC265E] Warp的更多相关文章

  1. CUDA2.1-原理之索引与warp

    本小节来自<大规模并行处理器编程实战>第四节,该书是很好的从内部原理结构上来讲述了CUDA的,对于理解CUDA很有帮助,借以博客的形式去繁取间,肯定会加入自己个人理解,所以有错误之处还望指 ...

  2. Warp divergence

    Threads are executed in warps of 32, with all threads in the warp executing the same instruction at ...

  3. CUDA ---- Warp解析

    Warp 逻辑上,所有thread是并行的,但是,从硬件的角度来说,实际上并不是所有的thread能够在同一时刻执行,接下来我们将解释有关warp的一些本质. Warps and Thread Blo ...

  4. CUDA性能优化----warp深度解析

    本文转自:http://blog.163.com/wujiaxing009@126/blog/static/71988399201701224540201/ 1.引言 CUDA性能优化----sp, ...

  5. Curved UI - VR Ready Solution To Bend Warp Your Canvas 1.7,1.8,2.2,2.3 四种版本压缩包(Unity UGUI曲面插件),可以兼容VRTK

    Curved UI - VR Ready Solution To Bend Warp Your Canvas 1.7,1.8,2.2,2.3 四种版本压缩包(Unity UGUI曲面插件) 可以兼容V ...

  6. 【并行计算-CUDA开发】CUDA编程——GPU架构,由sp,sm,thread,block,grid,warp说起

    掌握部分硬件知识,有助于程序员编写更好的CUDA程序,提升CUDA程序性能,本文目的是理清sp,sm,thread,block,grid,warp之间的关系.由于作者能力有限,难免有疏漏,恳请读者批评 ...

  7. 【并行计算-CUDA开发】CUDA ---- Warp解析

    Warp 逻辑上,所有thread是并行的,但是,从硬件的角度来说,实际上并不是所有的thread能够在同一时刻执行,接下来我们将解释有关warp的一些本质. Warps and Thread Blo ...

  8. 【并行计算-CUDA开发】warp是调度和执行的基本单位而harf-warp为存储器操作基本单位

    1.在用vs运行cuda的一些例子时,在编译阶段会报出很多警告: warning C4819 ...... 解决这个警告的方法是打开出现warning的文件,Ctrl+A全选,然后在文件菜单:file ...

  9. CUDA01 - 硬件架构、warp调度、指令流水线和cuda并发流

    这一部分打算从头记录一下CUDA的编程方法和一些物理架构上的特点:从硬件入手,写一下包括线程束的划分.流水线的调度等等微结构的问题,以及这些物理设备是如何与软件对应的.下一部分会写一下cuda中的几种 ...

  10. 还在玩传统终端,不妨来试试全新 AI 终端 Warp

    壹 ❀ 引 最近一段时间,AI领域如同雨后春笋般开始猛烈生长,processon,sentry,一些日常使用的工具都在积极接入AI,那么正好借着AI的风头,今天给大家推荐一款非常不错的智能终端 war ...

随机推荐

  1. LeetCode279:完全平方数,动态规划解法超过46%,作弊解法却超过97%

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本篇概览 这是道高频面试题,值得一看 首先, ...

  2. 探索计算机的I/O控制方式:了解DMA控制器的作用与优势

    I/O控制方式 在前面我们已经了解到,每个设备都配备了一个设备控制器.当CPU向设备控制器发送命令并将其存储在寄存器中时,设备控制器会执行相应的操作.然而,尽管设备控制器会更新状态寄存器的状态,但是如 ...

  3. 月工资不到10元的内容审核专员? - ChatGPT 在内容自动审查中的应用

    内容过滤筛查是指对网络上发布或传播的文本.图片.视频等内容进行审核和监管,以防止出现违法违规.暴力色情.虚假广告.电信诈骗等现象,维护网络安全和社会秩序. 内容过滤筛查是一个亟待解决的问题,因为网络内 ...

  4. Note -「Polynomial」

    Part. 1 FFT Part. 1-1 Main 对于一个 \(n\) 次多项式 \(F(x)=\sum_{i=0}^{n}a_{i}x^{i}\),在平面直角坐标系中可以由 \(n+1\) 个点 ...

  5. centos7离线安装docker和docker-compose

    1.找一台可联网的centos7主机 在这台可以联网的机器上把离线包都下载好. 2.下载docker rpm安装包和相关依赖 ## 安装yum-utils包,添加docker yum源 sudo yu ...

  6. 基于go语言gin框架的web项目骨架

    该骨架每个组件之间可单独使用,组件之间松耦合,高内聚,组件的实现基于其他三方依赖包的封装. 目前该骨架实现了大多数的组件,比如事件,中间件,日志,配置,参数验证,命令行,定时任务等功能,目前可以满足大 ...

  7. 在macOS上,可以使用以下步骤来清理本地多个版本的Python:

    确认已经安装了Homebrew 如果您还没有安装Homebrew,可以在终端中运行以下命令进行安装: /bin/bash -c "$(curl -fsSL https://raw.githu ...

  8. 关于 iPhone 上的相机功能

    关于 iPhone 上的相机功能 了解 iPhone 上的摄影风格.快录功能.超广角摄像头和其他相机功能.   通过摄影风格功能锁定您的风格 借助 iPhone 13 各款机型和 iPhone SE( ...

  9. Jmeter调用Python脚本,实现参数互相传递

    首先传值到python 1:新增取样器--->os进程取样器 2:新建.bat文件 (写python脚本的路径和传参的个数:思路是:jmeter调用shell,用shell执行py) F:cd ...

  10. linux 查找命令(whatis,free,df,top)

    whatis whatis命令是用于查询一个命令执行什么功能,并将查询结果打印到终端上,等同于 man -f: # whatis grep grep (1) - print lines matchin ...