zoukankan      html  css  js  c++  java
  • 【UVa1635】Irrelevant Elements

    题意

    给你 (n) 个数,每次求出相邻两个数的和组成新数列。经过 (n-1) 次操作后,得到一个数。求这个数 (mod m) 与哪些项无关。

    如:当 (m=2 , n=2)(a_1 , a_2 , a_3 Rightarrow a_1+a_2 , a_2+a_3 Rightarrow a_1+2a_2+a_3) 则与 (a_2) 无关

    思路

    由二项式定理知道结果系数是杨辉三角的第 (n-1) 行,问题转换成判断有多少个 (C_{n-1}^{i}) 可以整除 (m)

    考虑 (m)(C_{n-1}^{i}) 的唯一分解,(prod_{i=1}^n fac_i^{index_i})(C_{n-1}^{i}) 作比较,当所有的质因子都在 (C_{n-1}^{i}) 中出现并且次数都小于 (C_{n-1}^{i}) 的次数时,即可整除。

    分解 (C_{n}^{i}) 时需要用到组合数的递推式:(C_{n}^{i}=frac{n-i+1}{i} imes C_{n}^{i-1})。分解时只考虑 (frac{n-i+1}{i}),因为 (C_{n}^{i-1}) 在上一次中计算过了。

    /************************************************
    *Author        :  lrj124
    *Created Time  :  2019.08.09.21:03
    *Mail          :  1584634848@qq.com
    *Problem       :  uva1635
    ************************************************/
    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 100000 + 10;
    int n,m,m_index[maxn],factor[maxn],cnt,c_index[maxn],ans[maxn];
    inline void init() {
    	for (int i = 2;i*i <= m;i++)
    		if (!(m%i)) {
    			factor[++cnt] = i;
    			for (;!(m%i);m /= i,m_index[cnt]++);
    		}
    	if (m > 1) {
    		factor[++cnt] = m;
    		m_index[cnt]++;
    	}
    }
    inline bool check(int N,int k) {
    	N = N-k+1;
    	for (int i = 1;i <= cnt;i++) {
    		for	(;!(N%factor[i]);N /= factor[i],c_index[i]++);
    		for (;!(k%factor[i]);k /= factor[i],c_index[i]--);
    	}
    	for (int i = 1;i <= cnt;i++)
    		if (m_index[i] > c_index[i]) return false;
    	return true;
    }
    int main() {
    	//freopen("uva1635.in","r",stdin);
    	//freopen("uva1635.out","w",stdout);
    	while (cin >> n >> m) {
    		memset(m_index,0,sizeof(m_index));
    		memset(c_index,0,sizeof(c_index));
    		ans[0] = cnt = 0;
    		init();
    		for (int i = 1;i <= n-2;i++)
    			if (check(n-1,i)) ans[++ans[0]] = i+1;
    		printf("%d
    ",ans[0]);
    		for (int i = 1;i <= ans[0];i++) printf("%s%d",i ^ 1 ? " " : "",ans[i]);
    		printf("
    ");
    	}
    	return 0;
    }
    
  • 相关阅读:
    [CQOI2009][BZOJ1303] 中位数图
    [JSOI2008][BZOJ1016] 最小生成树计数
    [SCOI2005][BZOJ1083] 繁忙的都市
    [HAOI2006][BZOJ2428] 均分数据
    [HAOI2008][BZOJ1054] 移动玩具
    [ZJOI2006][BZOJ1003] 物流运输trans
    AW241 楼兰图腾
    AW239 奇偶游戏
    AW244 谜一样的牛
    AW278 数字组合(0/1背包)
  • 原文地址:https://www.cnblogs.com/lrj124/p/11332077.html
Copyright © 2011-2022 走看看