• LOJ6497「雅礼集训 2018 Day1」图


    https://loj.ac/p/6497

    考虑暴力,设 (f(i,k,x,y)) 表示考虑到第 (i) 个点,目前有 偶数/奇数 条路径,已经有 (x) 个定为黑色的点有奇数条路径结尾,有 (y) 个定为白色的点有奇数条路径结尾,的答案
    那么转移的话,枚举当前点颜色,以白色为例

    • (y=0),则无论前 (i) 个点如何向 (i+1) 连,本来白色的无法多形成路径,本来黑色的没有,那么只有一条新增路径是 (i+1) 一个单点有 (2^i f(i,k,x,0) ightarrow f(i+1,koperatorname{xor} 1,x,0))
    • (y eq 0),白色可以随便连就是 (2^x),枚举新增路径是奇是偶,由于 (i+1) 一个单点这个路径一定存在,就分别对应向黑色的 (y) 个点中的 偶数/奇数 个点连边
    • 但发现这样 (f(i,k,x,y)) 乘的系数都是 (2^{i-1}),所以 (x,y) 都只要记录为 (0)(1) 即可,于是就有了 (O(n)) 做法

    黑色同理

    
    #define mod 998244353
    #define N 200006
    int n;
    long long f[N][2][2][2],power[N];//f[i][k][x][y] k: even/odd x: white y: black
    inline void add(long long &x,long long y){x=(x+y>=mod)?(x+y-mod):(x+y);}
    int main(){
    	n=read();int need=read();
    	power[0]=1;
    	for(int i=1;i<=n;i++) power[i]=power[i-1]*2%mod;
    	int a=read();
    	if(a!=1) f[1][1][1][0]=1;//white
    	if(a!=0) f[1][1][0][1]=1;//black
    	for(int i=1;i<n;i++){
    		a=read();
    		for(int k=0;k<2;k++)for(int x=0;x<2;x++)for(int y=0;y<2;y++)if(f[i][k][x][y]){
    			long long now=f[i][k][x][y];
    			if(a!=1){//i+1: white
    				if(!y) add(f[i+1][k^1][1][y],now*power[i]%mod);
    				else{
    					add(f[i+1][k][x][y],now*power[i-1]%mod);add(f[i+1][k^1][1][y],now*power[i-1]%mod);
    				}
    			}
    			if(a!=0){//i+1: black
    				if(!x) add(f[i+1][k^1][x][1],now*power[i]%mod);
    				else{
    					add(f[i+1][k][x][y],now*power[i-1]%mod);add(f[i+1][k^1][x][1],now*power[i-1]%mod);
    				}
    			}
    		}
    	}
    	long long ans=0;
    	for(int x=0;x<2;x++)for(int y=0;y<2;y++) add(ans,f[n][need][x][y]);
    	printf("%lld
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    如何在Blog中使用feedburner管理RSS订阅
    网络基本功(八):细说TCP滑动窗口
    JAVA三大框架的各自作用
    NHibernate与EF(Entity Framework)的区别
    程序模拟浏览器请求及会话保持-python实现
    Netbeans7.4下搭建struts2.3.16
    解决Sqlite UTF-8中文数据格式在DOS窗口下中文乱码
    Android使用xml中定义的动画效果
    Android 之Activity切换动画效果
    设置ActioinBar 的背景色以及Title的字体颜色
  • 原文地址:https://www.cnblogs.com/suxxsfe/p/15382715.html
Copyright © 2020-2023  润新知