zoukankan      html  css  js  c++  java
  • [Cnoi2020]线性生物

    期望入门题。但是我不会做。

    考虑设\(E_{x\to{x+1}}\)\(x\)\(x+1\)点的期望步数。

    \(ans = \sum_{i = 0}^{n} E_{x\to{x+1}}\)

    \(E_{y\to{x+1}} = \sum_{i = y}^{x}E_{i\to{i + 1}}\)

    \(E_{x\to{x+1}} = \frac{1}{son + 1} + \frac{1}{son + 1}\sum_{(x,y)\ in\ {Son}}(E_{y\to{x+1}} + 1)\)

    \(E_{x\to{x+1}} = f_x\),\(sum_x = \sum_i^xf_i\)

    \(f_x = (son + 1) + \sum_{(x,y)\ in\ Son}sum_{x-1} - sum_{y - 1}\)

    // Problem: P6835 [Cnoi2020]线形生物
    // Contest: Luogu
    // URL: https://www.luogu.com.cn/problem/P6835
    // Memory Limit: 128 MB
    // Time Limit: 1000 ms
    // 
    // Powered by CP Editor (https://cpeditor.org)
    
    #include<iostream>
    #include<cstdio>
    #define ll long long
    #define mod 998244353
    #define N 1000005
    
    int head[N],cnt;
    struct P{
    	int to,next;
    }e[N << 1];
    
    inline void add(int x,int y){
    	e[++cnt].to = y;
    	e[cnt].next = head[x];
    	head[x] = cnt;
    }
    
    ll n,m,k,out[N];
    ll f[N],sum[N];
    
    int main(){
    	scanf("%lld%lld%lld",&k,&n,&m);
    	for(int i = 1;i <= m;++i){
    		ll l,r;
    		scanf("%lld%lld",&l,&r);
    		add(l,r);
    		out[l]++;
    	}
    	for(int i = 1;i <= n;++i){
    		f[i] = (out[i] + 1);
    		for(int j = head[i];j;j = e[j].next){
    			int v = e[j].to;
    			f[i] = (f[i] + (sum[i - 1] - sum[v - 1]) % mod + mod) % mod;
    		}
    		sum[i] = (sum[i - 1] + f[i]) % mod;
    	}
    	std::cout<<sum[n] % mod<<std::endl;
    	return 0;
    }
    
  • 相关阅读:
    338. 比特位计数
    300.最长上升子序列
    git 钩子服务代码
    thinkphp5.1 封装文件上传模块
    Theano 基础
    使用anaconda和pycharm搭建多python本版的开发环境
    GIT常用命令
    Thinkphp 获取数据表随机值
    在Windows中利用.bat提交git代码到不同分支
    Windows .bat 常量
  • 原文地址:https://www.cnblogs.com/dixiao/p/15015755.html
Copyright © 2011-2022 走看看