题解:

首先看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】破坏发射台的更多相关文章

  1. [UOJ UR#16]破坏发射台

    来自FallDream的博客,未经允许,请勿转载,谢谢. 传送门 先考虑n是奇数的情况,很容易想到一个dp,f[i][0/1]表示转移到第i个数,第i个数是不是第一个数的方案数,然后用矩阵乘法优化一下 ...

  2. UOJ 241. 【UR #16】破坏发射台 [矩阵乘法]

    UOJ 241. [UR #16]破坏发射台 题意:长度为 n 的环,每个点染色,有 m 种颜色,要求相邻相对不能同色,求方案数.(定义两个点相对为去掉这两个点后环能被分成相同大小的两段) 只想到一个 ...

  3. 【UOJ#242】【UR#16】破坏蛋糕(计算几何)

    [UOJ#242][UR#16]破坏蛋糕(计算几何) 题面 UOJ 题解 为了方便,我们假定最后一条直线是从上往下穿过来的,比如说把它当成坐标系的\(y\)轴. 于是我们可以处理出所有交点,然后把它们 ...

  4. uoj #242【UR #16】破坏蛋糕

    uoj 考虑把那最后一条直线拎出来,并且旋转到和\(y\)轴平行(其他直线同时一起旋转),然后它和其他直线相交形成\(n+1\)个区间,现在要知道这些区间是否处在一个面积有限的区域 可以发现一段在有限 ...

  5. Ubuntu 16.04安装qt5-default报错:qt5-default : 依赖: qtbase5-dev E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。(此类问题终极解决方法)

    切记:没事不要进行sudo apt-get upgrade 错误: qt5-default : 依赖: qtbase5-dev E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间 ...

  6. ABP(现代ASP.NET样板开发框架)系列之16、ABP应用层——数据传输对象(DTOs)

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之16.ABP应用层——数据传输对象(DTOs) ABP是“ASP.NET Boilerplate Project ...

  7. 编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议16~20)

    建议16:易变业务使用脚本语言编写 Java世界一直在遭受着异种语言的入侵,比如PHP,Ruby,Groovy.Javascript等,这些入侵者都有一个共同特征:全是同一类语言-----脚本语言,它 ...

  8. Ubuntu 16.04安装QQ国际版图文详细教程

            因工作需要,我安装了Ubuntu 16.04,但是工作上的很多事情需要QQ联系,然而在Ubuntu上的WebQQ很是不好用,于是在网上搜索了好多个Linux版本的QQ,然而不是功能不全 ...

  9. 【UOJ#33】【UR#2】树上GCD 有根树点分治 + 容斥原理 + 分块

    #33. [UR #2]树上GCD 有一棵$n$个结点的有根树$T$.结点编号为$1…n$,其中根结点为$1$. 树上每条边的长度为$1$.我们用$d(x,y)$表示结点$x,y$在树上的距离,$LC ...

随机推荐

  1. html接收参数

    代码 <!DOCTYPE html> <html> <head> <title>html接收参数</title> </head> ...

  2. winform,WPF 释放内存垃圾,减少资源占用方法

    [System.Runtime.InteropServices.DllImport("kernel32.dll")]        public static extern boo ...

  3. 【原创】angularjs1.3.0源码解析之执行流程

    Angular执行流程 前言 发现最近angularjs在我厂的应用变得很广泛,下周刚好也有个angular项目要着手开始做,所以先做了下功课,从源代码开始入手会更深刻点,可能讲的没那么细,侧重点在于 ...

  4. MySQL事物(一)事务隔离级别和事物并发冲突

    数据库的操作通常为写和读,就是所说的CRUD:增加(Create).读取(Read).更新(Update)和删除(Delete).事务就是一件完整要做的事情.事务是恢复和并发控制的基本单位.事务必须始 ...

  5. PCA whitening

    对输入数据,维度为2时,想要把数据降维1维: 数据的主方向就是旋转数据的第一维.因此,若想把这数据降到一维,可令: 数据已经进行预处理(零均值),使得每个特征和具有相同的均值和方差. PCA算法将寻找 ...

  6. <video>标签:视频播放器动态设置src

    HTML代码 <div  id="my_div">    <video id="my_video"  width="600" ...

  7. vscode 配置Git

    步骤: 下载Git客户端 配置环境变量 设置vscode与Git的关联 重启 步骤一: 该网址,下载即可. https://git-scm.com/downloads 步骤二: 计算机 > 属性 ...

  8. python队列queue 之优先级队列

    import queue as Q def PriorityQueue_int(): que = Q.PriorityQueue() que.put(10) que.put(1) que.put(5) ...

  9. Ajax跨域访问解决方案

    No 'Access-Control-Allow-Origin' header is present on the requested resource. 当使用ajax访问远程服务器时,请求失败,浏 ...

  10. SpringMVC使用Redis作为缓存提供者

    (1)pom添加依赖项 <dependency> <groupId>org.springframework.data</groupId> <artifactI ...