• loj2145 「SHOI2017」分手是祝愿


    (f_i) 是从要做 (i) 步好操作变成要做 (i-1) 步好操作的期望操作次数。
    显然 (f_i=i/n imes 1 + (1-i/n) imes (1 + f_{i+1}+f_i)),即 (f_i=(n+(n-i)f_{i+1})/i)(f_n=1)
    递推即可。

    #include <iostream>
    #include <cstdio>
    #include <vector>
    using namespace std;
    typedef long long ll;
    int n, k, a[100005], f[100005], hmn, inv[100005], fac, ans;
    const int mod=100003;
    vector<int> vec[100005];
    int main(){
    	cin>>n>>k;
    	f[n] = inv[0] = inv[1] = fac = 1;
    	for(int i=1; i<=n; i++){
    		scanf("%d", &a[i]);
    		for(int j=i; j<=n; j+=i)
    			vec[j].push_back(i);
    		if(i!=1)	inv[i] = (ll)(mod - mod / i) * inv[mod%i] % mod;
    		fac = (ll)fac * i % mod;
    	}	
    	for(int i=n; i>=1; i--)
    		if(a[i]){
    			hmn++;
    			for(int j=0; j<vec[i].size(); j++)
    				a[vec[i][j]] ^= 1;
    		}
    	if(hmn<=k)	cout<<(ll)hmn*fac%mod<<endl;
    	else{
    		for(int i=n-1; i>k; i--)
    			f[i] = (ll)((ll)(n-i)*f[i+1]+n) * inv[i] % mod;
    		for(int i=hmn; i>k; i--)
    			ans = (ans + f[i]) % mod;
    		ans = (ans + k) % mod;
    		ans = ((ll)ans * fac) % mod;
    		cout<<ans<<endl;
    	}
    	return 0;
    }
    
  • 相关阅读:
    线程高并发
    29(套接字)就是网络编程
    28线程
    27 枚举
    26静态导入和可变参数
    25JDK新特性
    25断言 assert关键字
    24单元测试 junit
    炫酷CSS
    PHP 汉字转拼音类
  • 原文地址:https://www.cnblogs.com/poorpool/p/8571552.html
Copyright © 2020-2023  润新知