zoukankan      html  css  js  c++  java
  • csp校门外的树

    #include<iostream>
    #include<cstdlib>
    #include<algorithm>
    #include<vector>
    
    using namespace std;
    
    const int N = 1010, M = 1e5 + 10, MOD = 1e9 + 7;
    int n;
    int a[N];
    int f[N]; //f[i] = a[0] ~ a[i] 方案数
    bool st[M];
    vector<int> factor[M];
    void get_factor(vector<int> *factor, int m)
    {
    	for (int i = 1; i < m; i++)
    	{
    		for (int j = i * 2; j < m; j += i)
    			factor[j].push_back(i);
    	}
     }
    
    int get_sum(int *a, int index)
    {
    	//printf("
    index:%d
    ", index);
    	memset(st, 0, sizeof(st));
    	if (0 == index) return 1;
    	long long res = 0;
    	for (int i = index - 1; i >= 0; i--) {
    		int d = a[index] - a[i], cnt = 0;
    		for (auto k : factor[d])
    		{
    			if (!st[k])
    			{
    				//printf("k:%d
    ", k);
    				cnt++;
    				st[k] = true;
    			}
    		}
    		st[d] = true;
    		res += ((long long)f[i] * cnt % MOD);
    		res %= MOD;
    		//printf("res:%d
    ", res);
    
    	}
    	return (int)(res % MOD);
    }
    
    int main() {
    	get_factor(factor, M);
    	//return 0;
    
    	scanf("%d", &n);
    	for (int i = 0; i < n; i++)
    	{
    		scanf("%d", a + i);
    		f[i] = get_sum(a, i) % MOD;
    		//printf("f_%d:%d
    ",i, f[i]);
    
    	}
    	printf("%d
    ", f[n - 1]);
    	return 0;
    }
    
  • 相关阅读:
    什么事数据对象以及属性分为什么类型?
    Oracle数据库安装
    红黑树和B树
    Java多线程02
    HashMap分析
    java虚拟机——垃圾回收与内存分配
    Java虚拟机——对象
    Java虚拟机——内存
    java数据结构03
    LeetCode刷题
  • 原文地址:https://www.cnblogs.com/CSE-kun/p/15226868.html
Copyright © 2011-2022 走看看