A. 【UR #16】破坏发射台
题解:
首先看n是偶数的
那么就是不需要满足对面这个性质的
这样就可以dp了 f[i][0/1]表示dp到第i位,当前数等于或不等于第一位的方案数
然后显然可以用矩阵优化
再考虑n为奇数
用一样的思路,把环切成两半,先确定两个对应位置的值,再进行dp
f[i][0/1/2][0/1/2]表示dp到i位,下面这个数等不等于上面第一个,等不等于下面第一个(同理上面)
发现这个可以dp,依旧用矩阵优化一波
转移方程稍微有点复杂,有个对拍就轻松多了
另外注意f不能表示成f[i][0/1][0/1]表示和不同侧的起始点
原因是这样转移的时候会出现问题,无法确定它旁边的点和同侧的起始点之间的颜色关系(非常的绕口)
注意别少取模
#include <bits/stdc++.h>
using namespace std;
#define ll long long
struct re{
ll a[][];
}aa;
ll a[][],n,m;
#define mo 998244353
re XX(re x,re y)
{
re tmp;
memset(tmp.a,,sizeof(tmp.a));
for (ll i=;i<=;i++)
for (ll j=;j<=;j++)
for (ll k=;k<=;k++)
tmp.a[i][k]+=x.a[i][j]*y.a[j][k],
tmp.a[i][k]%=mo;
return tmp;
}
re fast_pow(ll x)
{
if (x==) return(aa);
re b=fast_pow(x/);
b=XX(b,b);
if (x%==) b=XX(b,aa);
return (b);
}
int main()
{
freopen("noip.in","r",stdin);
freopen("noip.out","w",stdout);
cin>>n>>m;
if (n%==)
{
a[][]=(m-)*(m-)+(m-);
a[][]=a[][]=a[][]=a[][]=(m-)*(m-)+(m-);
a[][]=a[][]=(m-)*(m-);
a[][]=a[][]=m-;
a[][]=a[][]=a[][]=m-;
a[][]=a[][]=m-;
a[][]=a[][]=a[][]=m-;
a[][]=a[][]=m-;
a[][]=a[][]=a[][]=m-;
a[][]=a[][]=m-;
a[][]=a[][]=a[][]=m-;
a[][]=a[][]=a[][]=a[][]=;
a[][]=a[][]=a[][]=a[][]=;
for (ll i=;i<=;i++)
for (ll i=;i<=;i++)
for (ll j=;j<=;j++)
aa.a[i][j]=max(*1ll,a[i][j]%mo);
/* for (ll i=1;i<=8;i++)
{
for (ll j=1;j<=8;j++)
cout<<aa.a[i][j]<<" ";
cout<<endl;
}
cout<<endl<<endl;*/
re x=fast_pow(n/-);
/* for (ll i=1;i<=8;i++)
{
for (ll j=1;j<=8;j++)
cout<<x.a[i][j]<<" ";
cout<<endl;
}*/
ll ans=x.a[][]+x.a[][]+x.a[][]+x.a[][];
ans=(ans*m)%mo*(m-);
ans=(ans%mo+mo)%mo;
cout<<ans;
}
return ;
}
A. 【UR #16】破坏发射台的更多相关文章
- [UOJ UR#16]破坏发射台
来自FallDream的博客,未经允许,请勿转载,谢谢. 传送门 先考虑n是奇数的情况,很容易想到一个dp,f[i][0/1]表示转移到第i个数,第i个数是不是第一个数的方案数,然后用矩阵乘法优化一下 ...
- UOJ 241. 【UR #16】破坏发射台 [矩阵乘法]
UOJ 241. [UR #16]破坏发射台 题意:长度为 n 的环,每个点染色,有 m 种颜色,要求相邻相对不能同色,求方案数.(定义两个点相对为去掉这两个点后环能被分成相同大小的两段) 只想到一个 ...
- 【UOJ#242】【UR#16】破坏蛋糕(计算几何)
[UOJ#242][UR#16]破坏蛋糕(计算几何) 题面 UOJ 题解 为了方便,我们假定最后一条直线是从上往下穿过来的,比如说把它当成坐标系的\(y\)轴. 于是我们可以处理出所有交点,然后把它们 ...
- uoj #242【UR #16】破坏蛋糕
uoj 考虑把那最后一条直线拎出来,并且旋转到和\(y\)轴平行(其他直线同时一起旋转),然后它和其他直线相交形成\(n+1\)个区间,现在要知道这些区间是否处在一个面积有限的区域 可以发现一段在有限 ...
- Ubuntu 16.04安装qt5-default报错:qt5-default : 依赖: qtbase5-dev E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。(此类问题终极解决方法)
切记:没事不要进行sudo apt-get upgrade 错误: qt5-default : 依赖: qtbase5-dev E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间 ...
- ABP(现代ASP.NET样板开发框架)系列之16、ABP应用层——数据传输对象(DTOs)
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之16.ABP应用层——数据传输对象(DTOs) ABP是“ASP.NET Boilerplate Project ...
- 编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议16~20)
建议16:易变业务使用脚本语言编写 Java世界一直在遭受着异种语言的入侵,比如PHP,Ruby,Groovy.Javascript等,这些入侵者都有一个共同特征:全是同一类语言-----脚本语言,它 ...
- Ubuntu 16.04安装QQ国际版图文详细教程
因工作需要,我安装了Ubuntu 16.04,但是工作上的很多事情需要QQ联系,然而在Ubuntu上的WebQQ很是不好用,于是在网上搜索了好多个Linux版本的QQ,然而不是功能不全 ...
- 【UOJ#33】【UR#2】树上GCD 有根树点分治 + 容斥原理 + 分块
#33. [UR #2]树上GCD 有一棵$n$个结点的有根树$T$.结点编号为$1…n$,其中根结点为$1$. 树上每条边的长度为$1$.我们用$d(x,y)$表示结点$x,y$在树上的距离,$LC ...
随机推荐
- Python基础-day02
写在前面 上课第二天,打卡: 大人不华,君子务实. 一.进制相关 - 进制基础 数据存储在磁盘上或者内存中,都是以0.1形式存在的:即是以 二进制 的形式存在: 为了存储和展示,人们陆续扩展了数据的表 ...
- pd.qcut, pd.cut, df.groupby()等在分组和聚合方面的应用
pd.qcut, pd.cut, df.groupby()等在分组和聚合方面的应用 量化交易里, 需要进行大量的分组和统计, 以方便自己处优势的位置/机会. 比如对股价进行趋势分析, 波动性分析, 量 ...
- js针对数组的操作
链接:http://www.w3school.com.cn/jsref/jsref_obj_array.asp Array 对象方法 方法 描述 concat() 连接两个或更多的数组,并返回结果. ...
- tomcat server.xml
基于对server.xml的学习,结合源码,可以进一步理解tomcat的架构设计 1. 2. 3. 4 .valve链 参考: http://www.importnew.com/17124.html ...
- mysql架构解读~mysql的多源复制
一 场景需求 多源复制版本 5.7,目标主机5.6.21 4个DB机器的某些数据库需要数据汇总进行连表查询 二 进行搭建 1 导出相应的目的库 mysqldump -uuser -ppass ...
- JavaScript练习 - 模态对话框
模态对话框练习 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- SpringBoot2.x整合Redis实战 4节课
1.分布式缓存Redis介绍 简介:讲解为什么要用缓存和介绍什么是Redis,新手练习工具 1.redis官网 https://redis.io/download 2.新手 ...
- Linux CentOS 服务器搭建与初始化配置图文详解
这几天对服务器兴趣贼为浓厚,在虚拟机上装了一个CentOS7玩了玩,遇到过很多问题,比如网卡驱动设置,不能ping 等等问题,然后掏钱买个ECS搭服务器玩玩,下面就开始谢谢我的心路历程吧. 首先 买服 ...
- Fragment与Activity之间的相互通信
https://blog.csdn.net/u012702547/article/details/49786417 https://blog.csdn.net/carson_ho/article/de ...
- Java注解之Retention、Documented、Target、Inherited介绍
先看代码,后面一个个来解析: @Retention(RetentionPolicy.RUNTIME) @Target(value = {ElementType.METHOD, ElementType. ...