首页 > 其他分享 >SS241019B. 染色(color)

SS241019B. 染色(color)

时间:2024-10-19 16:49:03浏览次数:8  
标签:ch 颜色 SS241019B 染色 color int read 序列

SS241019B. 染色(color)

思路

首先观察结果序列长什么样子,且思考如何去重。

结果序列是若干段长度若干的颜色拼成的,满足颜色序列是原序列的一个子序列,如 111555334 可以是 123453345 的一个合法结果,对应的颜色序列是 1534。为了去重,要求颜色序列不存在两个相邻的颜色。

发现可以转换成求本质不同的子序列,满足子序列不存在两个相邻的颜色。

比如 1534 是一个合法的子序列,而 11534 不是。

对于一个长度为 \(len\) 的合法子序列,可以形成 \(\binom{n-1}{len-1}\) 个本质不同的结果。

求本质不同的没有相邻的相等颜色的子序列个数,可以使用 DP。

设 \(f_{i,j}\) 表示考虑到原序列第 \(i\) 个位置,填子序列的第 \(j\) 位的方案数。

假设原序列是 123453345,那么 \(f_6\) 可以由 \(f_{4 \sim 5}\) 转移而来。前缀和优化即可。

答案就是 \(f_{x,j}\) 乘上 \(\binom{n-1}{j-1}\)。可以插板,\(n-1\) 个位置插上 \(j-1\) 个板分成 \(j\) 块,每块非空。

由于题目只需要模 \(2\) 的结果,而且还叫你关注时间和空间限制,因此可以想到使用 bitset。加法在模 \(2\) 意义下是按位异或。把第二维变成 bitset。时间复杂度 \(O(\frac{n^2}{w})\)。

啊,但是空间会爆,空间是 \(O(\frac{n^2}{w})\) 的。

考虑 \(m\) 的数据范围是 \(2 \times 10^4\),考虑顺序扫描原序列,维护使用 bitset。维护 \(f_i\) 表示最后一位填目前颜色,子序列长度为 \(i\) 的方案数。

答案统计最后一位填每一个颜色的答案,每一种子序列长度乘上一个相应的组合系数。

考虑枚举到 \(x\),颜色是 \(c_x\)。维护 \(f\)。当前的 \(f\) 由上一个相同颜色到上一个颜色这一段区间的 \(f\) 相加得到。因此可以记一个到目前的前缀和数组 \(s_j\) 表示子序列长度为 \(j\),最后一位填 \(1 \sim x\) 的数的方案和。以及每个颜色最后一次出现的历史前缀和数组 \(g_{i,j}\) 表示最后一次出现颜色 \(i\) 时候的 \(s\),这样就可以算出目前的 \(f\) 了。然后就可以加到 \(s\) 和 \(g_{c_x}\) 里面。

最后统计答案可以直接统计 \(s\)。\(s_i\) 的系数是 \(\binom{n-1}{i-1}\),乘法在模 \(2\) 意义下是按位与。因此我们需要快速计算这一坨东西的奇偶性。需要学习卢卡斯定理。待学习。

总时间复杂度 \(O(\frac{n^2}{w})\),空间 \(O(\frac{nm}{w})\)。

code

#include<bits/stdc++.h>
// #define LOCAL
#define sf scnaf
#define pf printf
#define rep(x,y,z) for(int x=y;x<=z;x++)
#define per(x,y,z) for(int x=y;x>=z;x--)
using namespace std;
typedef long long ll;
#define isdigit(x) (x>='0'&&x<='9')
template <typename T>
void read(T &x) {
	x=0;
	char ch=getchar();
	for(;!isdigit(ch);ch=getchar()) ;
	for(;isdigit(ch);ch=getchar()) x=(x<<3)+(x<<1)+ch-'0';
}
template <typename T>
void write(T x,char ch) {
	static int st[20];
	int top=0;
	do {
		st[top++]=x%10;
		x/=10;
	}while(x);
	while(top) putchar(st[--top]+'0');
	putchar(ch);
}
constexpr int N=1e5+7,M=2e4+7;
int t,n,m,a[N];
bitset<N> f,g[M];
void init() {
	f.reset(),g[0].reset();
	rep(i,1,m) g[i].reset();
	g[0][0]=1;
}
int main() {
	#ifdef LOCAL
	freopen("my.out","w",stdout);
	#else 
	freopen("color.in","r",stdin);
	freopen("color.out","w",stdout);
	#endif
	read(t);
	while(t--) {
		read(n),read(m);
		rep(i,1,n) read(a[i]);
		init();
		rep(i,1,n) {
			f=(g[0]^g[a[i]])<<1;
			g[0]^=f;
			g[a[i]]=g[0];
		}
		int ans=0;
		rep(i,1,n) ans^=g[0][i]&(((i-1)&(n-1))==(i-1));
		putchar(ans?'1':'0');
	}
}

标签:ch,颜色,SS241019B,染色,color,int,read,序列
From: https://www.cnblogs.com/liyixin0514/p/18476071

相关文章

  • JCO发表加州大学团队最新医学AI研究,从常规HE染色切片预测同源重组缺陷和铂类药物反应|
    小罗碎碎念这篇文章是关于一项名为DeepHRD的深度学习平台的研究,该平台能够从常规的苏木精-伊红(H&E)染色组织切片中预测同源重组缺陷(HRD)和铂类药物反应。作者角色姓名单位第一作者ErikN.Bergstrom加州大学圣地亚哥分校Moores癌症中心通讯作者LudmilB.Alexandrov加州......
  • TopCoder SRM616 ColorfulCoins 题解
    TopCoderSRM616ColorfulCoins题意给一套货币,保证任意两种货币存在倍数关系且颜色互不相同。已知货币的币值集合,每次可以询问一个金额,给出货币张数最小的表示方案。问最小的询问次数,使得通过已知信息可以对应货币面值和颜色。分析最大的面值问一个\(\inf\)即可。这时只需要......
  • Fileheader 1.13.1 - ColorLinux
    为了在控制台打印彩色内容而设计的头文件早就想封了,今天实现一下普通输出这是第一版写的,因为觉得不好就弃用,但是并没有删,在某些场合可能会用的方便点这一版定义了一个color_print()其定义为#definecolor_print(x)printf("%s",((string)""+(x)+color.NONE).c_str())可以......
  • P11022 「LAOI-6」Yet Another Graph Coloration Problem
    P11022「LAOI-6」YetAnotherGraphColorationProblem-洛谷|计算机科学教育新生态(luogu.com.cn)关于无解情况,如果这个图有两块连通块,那么不可能同时有黑色白色,假设\(1,2\)连通块,设\(1\)中有黑色,因为\(2\)中点不能到\(1\),所以\(2\)中只能是黑色,又因为\(2\)中......
  • [HAOI2015] 树上染色
    原题链接\(首先注意到用点维护dp值非常地难做\)\(我们无法通过点直接维护树上的每个节点的染色\)\(因为这样做的复杂度为O(2^n)\)\(我们考虑到通过枚举边来处理\)\(对于每条边枚举它两边的黑色和白色节点数\)\(那么对该条边被经过的数量为两边的黑色节点数和白色节点数的乘......
  • 二分图的判定-染色法
    二分图如果一张无向图的N个节点可以分成A.B两个不相交的非空集合,并且同一集合内的点之间没有边相连,那么称该无向图为二分图(BipartiteGraph)。定理:二分图不存在奇环(长度为奇数的环)。因为每一条边都是从一个集合走到另一个集合,只有走偶数次才可能回到同一个集合。染色......
  • 【VBA】シートの見出し色を設定【.Tabl.Colorと.Tab.ColorIndexを使う】
    参考元:【VBA】シートの見出し色を設定【.Tabl.Colorと.Tab.ColorIndexを使う】https://daitaideit.com/vba-sheet-tab-color/シートの見出しの色を設定する「.Tab.Color」でシート色を設定SubTEST1()'シート見出しの色を設定Sheets("Sheet1").Tab.Color=RG......
  • WPF FindResource,Resource[key] SystemColors TryFindResource
    //xaml<Windowx:Class="WpfApp3.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.micr......
  • 题解:TopCoder12316 ThreeColorability
    Vjudge可以出成《三色绘恋》背景。题意给一个格点数为\((n+1)\times(m+1)\)的网格,给格点染色,相邻的格点不能染成同样的颜色。每个格子有一条对角线的边,可选N形和Z形。现在有一个残缺的网格,存在一些格子的对角线连法不确定,构造一种字典序最小的方案使得至少存在一种染色......
  • SwiftUI简明概念(1):ForegroundColor VS ForegroundStyle
    一、何谓前景色在SwiftUI体系内,一个View可能包含一个或多个图层,那么最前面的一个图层就是ForegroundColor或ForegroundStyle作用的目标图层。当然这个图层可能不会响应前景色的要求:如上图所示,Rectangle作为shape图层,能响应前景色要求,导致图层变成前景色。Button的作用图层是......