D、数列求和(嘤雄难度)

1、 

2、

3、考虑先求出  的所有质因数,然后通过容斥来求所有与  不互质的  的和。

4、假设当前容斥算的质数是  ,那么就有  个该质数的倍数,即要求

,式子化简得,求和公式再化简即可在时间内算出结果。

Code:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod = 1e9 + 7;
vector<ll>v;
ll power(ll a, ll b)
{ll res = 1;while (b){if (b & 1)res = res * a % mod;a = a * a % mod;b >>= 1;}return res;
}
void get(ll k)
{for (int i = 2; i * i <= k; i++){if (k % i == 0){v.push_back(i);while (k % i == 0)k /= i;}}if (k > 1)v.push_back(k);
}
ll n, m;
ll inv2 = power(2, mod - 2);
ll inv6 = power(6, mod - 2);
ll calc(ll k)
{ll cnt = n / k;ll res = ((k * k % mod) * (cnt * (cnt + 1) % mod) % mod) * ((2 * cnt + 1) * inv6 % mod) % mod + (cnt * (cnt + 1) % mod) * (k * inv2 % mod) % mod;return res % mod;
}
int main()
{while (scanf("%lld%lld", &n, &m) > 0){v.clear();get(m);int sz = v.size();ll ans = 0;for (int i = 0; i < (1 << sz); i++){int num = 1, cishu = 0;for (int j = 0; j < sz; j++){if (i & (1 << j)){num *= v[j];cishu++;}}if (cishu & 1)ans = (ans - calc(num) + mod) % mod;elseans = (ans + calc(num)) % mod;}printf("%lld\n", ans);}
}

J、滑稽树下你和我

计算每条边的贡献,即两边点的个数的乘积,然后再乘这条边的长度,总和就是答案

Code:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int MAXN = 1e5 + 5;
const ll mod = 1e9 + 7;
struct edge
{int to;ll w;int nex;
}e[MAXN * 2];
int head[MAXN], tot = 1;
void add(int a, int b, ll c)
{e[tot] = edge{ b,c,head[a] };head[a] = tot++;
}
int num[MAXN], n;
bool vis[MAXN];
void init()
{memset(head, -1, sizeof(head));tot = 1;
}
ll ans = 0;
#define Pair pair<int,int>
map<Pair,ll>mp;
void dfs(int u, int fa)
{num[u] = 1;for (int i = head[u]; i + 1; i = e[i].nex){int v = e[i].to;if (v != fa){dfs(v, u);num[u] += num[v];ll ad = 1LL * (n - num[v]) * num[v] % mod;if (u < v)ad *= mp[Pair{ u,v }];elsead *= mp[Pair{ v,u }];ad %= mod;ans = (ans + ad) % mod;}}
}
int main()
{init();int a, b;ll c;scanf("%d", &n);for (int i = 1; i < n; i++){scanf("%d%d%lld", &a, &b, &c);add(a, b, c);add(b, a, c);if (a > b)swap(a, b);mp[Pair{ a,b }] = c;}dfs(1, 0);printf("%lld\n", ans);
}

I、滑稽树上滑稽果

莫队算法,考虑将所求的作为单独一项 即  ,为了方便,下面将使用  来表示 

预处理阶乘和阶乘的逆元

Code:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod = 1e9 + 7;
const int MAXN = 1e5 + 5;
struct node
{int index;int n;int m;
}in[MAXN];
int id[105];
ll fac[MAXN], inv[MAXN];
ll ans[MAXN];
ll power(ll a, ll b)
{ll res = 1;while (b){if (b & 1)res = res * a % mod;a = a * a % mod;b >>= 1;}return res;
}
void init()
{fac[0] = fac[1] = 1;for (int i = 2; i < MAXN; i++)fac[i] = fac[i - 1] * i % mod;inv[0] = inv[1] = 1;inv[100000] = power(fac[100000], mod - 2);for (int i = 99999; i > 1; i--)inv[i] = inv[i + 1] * (i + 1) % mod;
}
ll comb(ll a, ll b)
{if (a < b || b < 0)return 0;ll res = fac[a] * inv[b] % mod * inv[a - b] % mod;return res;
}
ll inv2 = (mod + 1) / 2;
int unit;
int main()
{init();int num;scanf("%d", &num);for (int i = 0; i < num; i++){in[i].index = i;scanf("%d%d", &in[i].n, &in[i].m);}unit = sqrt(num);sort(in, in + num, [](node q, node w) {if (q.n / unit == w.n / unit)return q.m < w.m;return q.n < w.n;});int a = 0, b = -1;ll res = 0;for (int i = 0; i < num; i++){while (a < in[i].n){res = (res * 2 - comb(a, b) + mod) % mod;a++;}while (a > in[i].n){res = ((res + comb(a - 1, b)) % mod * inv2) % mod;a--;}while (b < in[i].m){res = (res + comb(a, b + 1)) % mod;b++;}while (b > in[i].m){res = (res - comb(a, b) + mod) % mod;b--;}ans[in[i].index] = res * power(inv2, in[i].n) % mod;}for (int i = 0; i < num; i++)printf("%lld\n", ans[i]);
}

D、数列求和(嘤雄难度) J、滑稽树下你和我 I、滑稽树上滑稽果相关推荐

  1. 滑稽树下你和我Average distance(树形dp求任意两点距离之和)

    滑稽树下你和我. 链接:https://ac.nowcoder.com/acm/contest/992/J 来源:牛客网 题目描述 红红和蓝蓝是随机降生在苹果树上的苹果仙灵,现在红线仙想估测他们的CP ...

  2. 吉首大学2019年程序设计竞赛(重现赛) J 滑稽树下你和我 (递归)

    链接:https://ac.nowcoder.com/acm/contest/992/J 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  3. 滑稽树下你和我(树+贡献)

    链接:https://ac.nowcoder.com/acm/contest/992/J?&headNav=acm 来源:牛客网 题目描述 红红和蓝蓝是随机降生在苹果树上的苹果仙灵,现在红线仙 ...

  4. 浙江大学 PTA 程序 第四部分 给定精度的简单交错序列部分和 数字游戏 e的近似值 最小值 统计素数并求和 奇数和 幂级数展开的部分和 分数序列前N项和 特殊a串数列求和 换硬币 水仙花数 最大公约

    练习4-3 求给定精度的简单交错序列部分和 (15 分) 本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... 直到最后一项的绝对值不大于给定精度eps. 输入格式: ...

  5. 7-38 数列求和-加强版(20 分)

    7-38 数列求和-加强版(20 分) 给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯A(N个A).例如A=1, N=3时,S=1+11+ ...

  6. 第六章第十三题(数列求和)(Sum series)

    *6.13(数列求和)编写一个方法对下面的数列求和: 编写一个测试程序,显示下面的表格: i                          m(i) ----------------------- ...

  7. 高考数学试题数列求和|附习题

    很多同学抱怨平时花费大量时间,但数学成绩不见提升,该学了也学了,可是一考试发现还是不会做,其实在数学学习上方法很重要,做题方法对了,其实数学必不难学. 今天,肖老师给同学们整理了高考必考的数列方面的内 ...

  8. 韩信点兵--求分数序列前N项和--特殊a串数列求和--猜数字游戏

    实验4-1-5 韩信点兵 (10分) 在中国数学史上,广泛流传着一个"韩信点兵"的故事:韩信是汉高祖刘邦手下的大将,他英勇善战,智谋超群,为汉朝建立了卓越的功劳.据说韩信的数学水平 ...

  9. 用生成函数法解决数列求和问题

    文章目录 写在前面 问题 求解 写在前面 组合数学的一种重要思想就是生成函数(generation function,也叫母函数),前面介绍过了第一二类Stirling数的生成函数的计算,有兴趣的朋友 ...

最新文章

  1. datagirdview跟据内容自动适应单元格大小
  2. PartitionStateMachine分析
  3. Java设计模式05:常用设计模式之原型模式(创建型模式)
  4. C#笔记03 运算符和分支结构
  5. Windows的图形设备接口(GDI)入门 上篇
  6. 手机html5顶部返回上一页,手机端网页返回顶部js代码
  7. 实验九 哈希表的查找操作
  8. 5月14日社区技术直播【Analytics Zoo上的分布式TensorFlow训练AI玩FIFA足球游戏】
  9. 投身开源,需要持之以恒的热爱与贡献 —— Apache Spark Committer 姜逸坤
  10. CentOS7 安装php7.4
  11. 电机仿真系列-基于LabVIEW的电机测试系统研究
  12. c语言---指针结构体篇
  13. 服务器防火墙怎么关闭?
  14. 47个经典java程序编程题
  15. CSS 背景(background)
  16. dedecms织梦快照被挟持和篡改入侵漏洞修复
  17. http请求中必须具备哪个字段_HTTP访问控制(CORS)
  18. linux_安装启动talnet相关问题
  19. 计算机存储单位及换算
  20. 卡尔曼滤波器公式推导

热门文章

  1. java检查word文档内容缺失_恢复Word文档内容需要了解的知识
  2. jenkins安全设置后登录报HTTP Status 404 j_acegi_security_check,导致无法登录
  3. 【项目分享~写给应届生的一篇文章】基于Web企业招聘网站 ~~ 登录注册设计2
  4. vue-cli脚手架是什么及其脚手架搭建
  5. 有后效性和无后效性的通俗理解
  6. 有参函数和无参函数的区别
  7. 文本分类半监督学习--UDA
  8. “天涯棋客”回沪教棋
  9. 怎样下载百度爱采购的图片
  10. 浅谈大数据时代的大数据技术与应用