牛客提高D6t2 破碎的序列
分析
我们不难发现对于偶数的情况只要相邻两个数不相等即可
而对于奇数的情况只要中间恰好隔一个数的两个数不相等即可
于是我们又dp[i][0/1]表示考虑到第i位,这一位和它后面离它最近的一个确定的数是否相等
每次从i-1转移即可
注意对于奇数的情况最终答案要n-1和n的dp值相乘以保证合法
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
const int mod = ;
int dp[][],a[],b[],n,m,k;
int main(){
int i,j;
scanf("%d%d%d",&n,&k,&m);
for(i=;i<=n;i++)scanf("%d",&a[i]);
if(m==){
for(i=n-;i>;i--)b[i]=a[i+]?a[i+]:b[i+];
if(a[]&&a[]==b[]){
dp[][]=;
dp[][]=;
}else if(a[]){
dp[][]=;
dp[][]=;
}else {
dp[][]=;
dp[][]=k-;
}
for(i=;i<=n;i++)
if(a[i]&&a[i]==b[i]){
dp[i][]=;
dp[i][]=dp[i-][];
}else if(a[i]){
dp[i][]=;
dp[i][]=dp[i-][];
}else {
dp[i][]=dp[i-][];
dp[i][]=((dp[i][]+1ll*dp[i-][]*(k-)%mod)%mod+1ll*dp[i-][]*(k-)%mod)%mod;
}
printf("%d\n",(dp[n][]+dp[n][])%mod);
}else {
for(i=n-;i>;i--)b[i]=a[i+]?a[i+]:b[i+];
for(i=;i<=;i++){
if(a[i]&&a[i]==b[i]){
dp[i][]=;
dp[i][]=;
}else if(a[i]){
dp[i][]=;
dp[i][]=;
}else {
dp[i][]=;
dp[i][]=k-;
}
}
for(i=;i<=n;i++)
if(a[i]&&a[i]==b[i]){
dp[i][]=;
dp[i][]=dp[i-][];
}else if(a[i]){
dp[i][]=;
dp[i][]=dp[i-][];
}else {
dp[i][]=dp[i-][];
dp[i][]=((dp[i][]+1ll*dp[i-][]*(k-)%mod)%mod+1ll*dp[i-][]*(k-)%mod)%mod;
}
printf("%d\n",1ll*((dp[n][]+dp[n][])%mod)*((dp[n-][]+dp[n-][])%mod)%mod);
}
return ;
}
牛客提高D6t2 破碎的序列的更多相关文章
- 牛客提高D3t1 破碎的矩阵
分析 我们发现如果行的异或和等于列的异或和那么对于n-1行m-1列的所有数的选择都是任意的 因为一定可以在它的行末/列末选一个合适的数是的整体满足 但是我们发现对于右下角那一个数是否满足存疑 我们设矩 ...
- 牛客练习赛26:D-xor序列(线性基)
链接:牛客练习赛26:D-xor序列(线性基) 题意:小a有n个数,他提出了一个很有意思的问题:他想知道对于任意的x, y,能否将x与这n个数中的任意多个数异或任意多次后变为y 题解:线性基 #inc ...
- 牛客OI测试赛 C 序列 思维
链接:https://www.nowcoder.com/acm/contest/181/C来源:牛客网 题目描述 小a有n个数,他想把他们划分为连续的权值相等的k段,但他不知道这是否可行. 每个数都必 ...
- 牛客练习赛26 D xor序列 (线性基)
链接:https://ac.nowcoder.com/acm/contest/180/D 来源:牛客网 xor序列 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他 ...
- 牛客挑战赛 39 牛牛与序列 隔板法 容斥 dp
LINK:牛牛与序列 (牛客div1的E题怎么这么水... 还没D难. 定义一个序列合法 当且仅当存在一个位置i满足 $a_i>a_,a_j<a_$且对于所有的位置i,$1 \leq a_ ...
- 牛客小白月赛12J(序列自动机)
题目链接:https://ac.nowcoder.com/acm/contest/392/J 题目大意:给一个字符串s,然后在给出n个其他的字符串,判断每个字符串是否为s的子序列. 例: 输入: no ...
- 牛客练习赛26—D xor序列 —线性基
这是我第一次写关于线性基的题目.其实这题很好理解,先把给出的数能异或出的值给存在p数组里面,p[i]代表着该异或出的数的最高位为第i位且为1. 求出来后,再把x,y处理下,然后直接一位一位的判断是否为 ...
- 牛客OI赛制测试赛-序列-模拟
哇这道题好坑啊,可能是我太菜了 题意就是叫把一个连续序列分成K组,使得每个组的和都相等 我最开始的想法是由于要分成K组,那我们知道,每组一定有sum(a[i])/k这样我们只需要每次当num==sum ...
- 牛客提高D1t2 最小生成链
分析 我们发现可以把题目转化为:有一个序列a,问它的排列中相邻两个值异或的最大值的最小值 我们发现序列的构成一定是前几位全是一样的 从某一位开始左面全是0右面全是1 所以只要找到一种方案是的交界两个值 ...
随机推荐
- TypeScript + Webpack 环境搭建
TypeScript + Webpack 环境搭建步骤 安装Node.js 安装npm 创建一个npm项目 安装typescript,配置ts 安装webpack,配置webpack 初始化一个npm ...
- 东软、天健、金仕达、杭创、中联、NECHIS、军字一号 HIS产品的比较
HIS主流厂商产品介绍1.沈阳东软医疗系统有限公司创立于1998年公司是中国目前最大的软件集团——东软集团为技术和资源依托,以研制生产大型医疗设备为主,同时为医院数字化提供全面解决方案.但是,公司改制 ...
- 不用找了,300 分钟帮你搞定 Spring Cloud!
最近几年,微服务架构一跃成为 IT 领域炙手可热的话题,大量一线互联网公司因为庞大的业务体量和业务需求,纷纷投入了微服务架构的建设中,像阿里巴巴.百度.美团等大厂,很早就已经开始了微服务的实践和应用. ...
- 省电的iPhone定位
1.Getting the User’s Current Location 获取用户当前位置. 获取位置的方式有三种:GPS, cell tower triangulation(蜂窝站点), 和 Wi ...
- 【知识强化】第二章 数据的表示和运算 2.4 算术逻辑单元ALU
从本节开始我们就进入到本章的最后一节内容了,也就是我们算术逻辑单元的它的实现.这部分呢是数字电路的一些知识,所以呢,如果你没有学过数字电路的话,也不要慌张,我会从基础开始给大家补起.那么在计算机当中, ...
- 【记录】mybatis mapper.xml 基础
<choose> <when test=""> //... </when> <otherwise> //... </other ...
- 初学Java 二维数组找出最近的两个点
import java.util.Scanner; public class FindNearestPoints { public static void main(String[] args) { ...
- ThreadLocal 应用
利用threadLocal 把拦截器中的对象传递到controller或service中 1.可以用 request 携带数据. 2.更优雅的方式是用threadlocal. 请求进入tomcat 和 ...
- LeetCode--041--缺失的第一个整数(java)
给定一个未排序的整数数组,找出其中没有出现的最小的正整数. 示例 1: 输入: [1,2,0] 输出: 3 示例 2: 输入: [3,4,-1,1] 输出: 2 示例 3: 输入: [7,8,9,11 ...
- NodeJS使用puppeteer进行截图
const puppeteer = require('/home/ordinaryUser_2/automation/NodeJS/node/lib/node_global/lib/node_modu ...