目录

  • Road To The 3rd Building · 期望
  • Little Rabbit's Equation · 模拟
  • Fragrant numbers · dp
  • A Very Easy Graph Problem · 树上任意两点间距离
  • Divisibility
  • Expectation · 矩阵树求生成树个数

Road To The 3rd Building · 期望

http://acm.hdu.edu.cn/showprobem.php?pid=6827
期望 = 区间的权值 * 区间出现的次数

当 n=3n=3n=3

E(x)=∑x×p(x)=a1+12(a1+a2)+13(a1+a2+a3)+a2+12(a2+a3)+a3n(n+1)2E(x)=\sum x\times p(x)=\cfrac{ a_1+\frac{1}{2}(a_1+a_2)+\frac{1}{3}(a_1+a_2+a_3)+a_2+\frac{1}{2}(a_2+a_3)+a_3}{\cfrac{n(n+1)}{2}}E(x)=∑x×p(x)=2n(n+1)​a1​+21​(a1​+a2​)+31​(a1​+a2​+a3​)+a2​+21​(a2​+a3​)+a3​​

=a1(1+12+13)+a2(1+212+13)+a3(1+12+13)6=\cfrac{a_1(1+\frac{1}{2}+\frac{1}{3})+a_2(1+2\frac{1}{2}+\frac{1}{3})+a_3(1+\frac{1}{2}+\frac{1}{3})}{6}=6a1​(1+21​+31​)+a2​(1+221​+31​)+a3​(1+21​+31​)​

当 n=4n=4n=4

E(x)=a1+12(a1+a2)+13(a1+a2+a3)+14(a1+a2+a3+a4)+a2+12(a2+a3)+13(a2+a3+a4)+a3+12(a3+a4)+a410E(x)=\cfrac{ a_1+\frac{1}{2}(a_1+a_2)+\frac{1}{3}(a_1+a_2+a_3)+\frac{1}{4}(a_1+a_2+a_3+a_4)+a_2+\frac{1}{2}(a_2+a_3)+\frac{1}{3}(a_2+a_3+a_4)+a_3+\frac{1}{2}(a_3+a_4)+a_4}{10}E(x)=10a1​+21​(a1​+a2​)+31​(a1​+a2​+a3​)+41​(a1​+a2​+a3​+a4​)+a2​+21​(a2​+a3​)+31​(a2​+a3​+a4​)+a3​+21​(a3​+a4​)+a4​​

=a1(1+12+13+14)+a2(1+212+213+14)+a3(1+212+213+14)+a4(1+12+13+14)10=\cfrac{a_1(1+\frac{1}{2}+\frac{1}{3}+\frac{1}{4})+a_2(1+2\frac{1}{2}+2\frac{1}{3}+\frac{1}{4})+a_3(1+2\frac{1}{2}+2\frac{1}{3}+\frac{1}{4})+a_4(1+\frac{1}{2}+\frac{1}{3}+\frac{1}{4})}{10}=10a1​(1+21​+31​+41​)+a2​(1+221​+231​+41​)+a3​(1+221​+231​+41​)+a4​(1+21​+31​+41​)​

以此类推,当n=5n=5n=5

E(x)=a1(1+12+13+14+15)+a2(1+212+213+214+15)+a3(1+212+313+214+15)+a4(1+212+213+214+15)+a5(1+12+13+14+15)15E(x)=\cfrac{a_1(1+\frac{1}{2}+\frac{1}{3}+\frac{1}{4}+\frac{1}{5})+a_2(1+2\frac{1}{2}+2\frac{1}{3}+2\frac{1}{4}+\frac{1}{5})+a_3(1+2\frac{1}{2}+3\frac{1}{3}+2\frac{1}{4}+\frac{1}{5})+a_4(1+2\frac{1}{2}+2\frac{1}{3}+2\frac{1}{4}+\frac{1}{5}) +a_5(1+\frac{1}{2}+\frac{1}{3}+\frac{1}{4}+\frac{1}{5})}{15}E(x)=15a1​(1+21​+31​+41​+51​)+a2​(1+221​+231​+241​+51​)+a3​(1+221​+331​+241​+51​)+a4​(1+221​+231​+241​+51​)+a5​(1+21​+31​+41​+51​)​

#include <bits/stdc++.h>
using namespace std;typedef long long ll;
const ll mod = 1e9 + 7;
const int N = 1e6 + 10;
ll n;ll qpow(ll a, ll b) {a %= mod;ll res = 1;while (b) {if (b & 1) res = res * a % mod;a = a * a % mod;b >>= 1;}return res;
}ll Add(ll x, ll y) {return (x + y) % mod;
}ll Sub(ll x, ll y) {return (x - y + mod) % mod;
}ll Mul(ll x, ll y) {return (x * y) % mod;
}ll demo[N], sum[N], a[N];int main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);for (int i = 1; i <= 200010; i++) {demo[i] = qpow(i, mod - 2); // 1/isum[i] = Add(sum[i - 1], demo[i]); // ∑1/i}int T;cin >> T;while (T--) {cin >> n;for (int i = 1; i <= n; i++) {cin >> a[i];}ll tmp = 0;ll res = 0;for (int i = 1, j = n; i <= j; i++, j--) {// tmp+= sum[j]-sum[i-1]tmp = Add(tmp, Sub(sum[j], sum[i - 1]));// res+=a[i] * tmp + a[n - i + 1] * tmp;res = Add(res, Mul(a[i], tmp));if (j > i) {res = Add(res, Mul(a[j], tmp));}}ll Inv = qpow(n * (n + 1) / 2, mod - 2); // 1/区间个数res = Mul(res, Inv);cout << res << endl;}return 0;
}

Little Rabbit’s Equation · 模拟

http://acm.hdu.edu.cn/showproblem.php?pid=6828

#include <bits/stdc++.h>
using namespace std;
#define between(x, a, b) (a<=x && x<=b)
typedef long long ll;
int bit[20];
string num1, num2, num3;ll toInt(string s, int b) {int sz = s.length();for (int i = 0; i < sz; i++) {bit[i] = (between(s[i], '0', '9') ? s[i] - '0' : s[i] - 'A' + 10);}ll res = 0;for (int i = 0; i < sz; i++) {if (bit[i] >= b) return -1; // 判断数字是否合法res = res * b + bit[i];}return res;
}bool solve(ll a, ll b, ll c, int op) {if (op == 1) return (a + b) == c;else if (op == 2) return (a - b) == c;else if (op == 3) return (a * b) == c;else return ((a % b) == 0 && (a / b == c)); // 防整除精度问题
}bool check(int b, int op) {ll x = toInt(num1, b);if (x == -1) return false;ll y = toInt(num2, b);if (y == -1) return false;ll z = toInt(num3, b);if (z == -1) return false;return solve(x, y, z, op);
}string s;int main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);while (cin >> s) {int sz = s.length();int i = 0, j, op;while (i < sz && (between(s[i], '0', '9') || between(s[i], 'A', 'F'))) i++;num1 = s.substr(0, i);if (s[i] == '+') op = 1;else if (s[i] == '-') op = 2;else if (s[i] == '*') op = 3;else if (s[i] == '/') op = 4;i++;j = i;while (i < sz && (between(s[i], '0', '9') || between(s[i], 'A', 'F'))) i++;num2 = s.substr(j, i - j);i++;j = i;while (i < sz && (between(s[i], '0', '9') || between(s[i], 'A', 'F'))) i++;num3 = s.substr(j, i - j);int f = -1;for (int i = 2; i <= 16; i++) {if (check(i, op)) {f = i;break;}}cout << f << endl;}return 0;
}

Borrow
Asteroid in Love

Fragrant numbers · dp

http://acm.hdu.edu.cn/showproblem.php?pid=6831

#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int N = 1e6 + 10;
int n;
int res[N];
string s = " 114514191911451419191145141919";
set<int> f[20][20];void dfs(int l, int r) {if (r - l + 1 <= 4) {int num = 0;for (int i = l; i <= r; i++) {num = num * 10 + (s[i] - '0');}f[l][r].insert(num);}for (int i = l; i < r; i++) {dfs(l, i);dfs(i + 1, r);for (int a: f[l][i]) {for (int b: f[i + 1][r]) {if (a + b <= 5000) {f[l][r].insert(a + b);}if (a * b <= 5000) {f[l][r].insert(a * b);}}}}
}void init() {dfs(1, 13);memset(res, INF, sizeof res);for (int i = 1; i <= 13; i++) {for (int x:f[1][i]) {res[x] = min(res[x], i);}}for (int i = 1; i <= 5000; i++) {if (res[i] == INF) res[i] = -1;}}int main() {ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);init();int T;cin >> T;for (int cs = 1; cs <= T; cs++) {cin >> n;cout << res[n] << endl;}return 0;
}

A Very Easy Graph Problem · 树上任意两点间距离

http://acm.hdu.edu.cn/showproblem.php?pid=6832
官方题解

树上任意两点间距离的改版

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7;
const int N = 1e6 + 10;struct Edge {int v;ll w;
};
vector<Edge> e[N];int a[N];
int n, m;
int fa[N];int find(int x) {return fa[x] == x ? x : fa[x] = find(fa[x]);
}void Union(int x, int y, ll w) {int fx = find(x);int fy = find(y);if (fx == fy) return;e[x].push_back({y, w});e[y].push_back({x, w});if (fx < fy) {fa[fy] = fx;} else {fa[fx] = fy;}
}ll Mul(ll x, ll y) {return (x * y) % mod;
}ll Add(ll x, ll y) {return (x + y) % mod;
}ll Sub(ll x, ll y) {return (x - y + mod) % mod;
}ll res;
ll sum[N][2];void dfs1(int u, int f) {sum[u][0] = sum[u][1] = 0;for (int i = 0, sz = e[u].size(); i < sz; i++) {int v = e[u][i].v;if (v != f) {dfs1(v, u);sum[u][0] += sum[v][0];sum[u][1] += sum[v][1];}}sum[u][a[u]]++;
}void dfs2(int u, int f) {for (int i = 0, sz = e[u].size(); i < sz; i++) {int v = e[u][i].v;if (v != f) {dfs2(v, u);res = Add(res, Mul(e[u][i].w, Mul(sum[v][0], Sub(sum[1][1], sum[v][1]))));res = Add(res, Mul(e[u][i].w, Mul(sum[v][1], Sub(sum[1][0], sum[v][0]))));}}
}ll p[N];int main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);p[0] = 1;for (int i = 1; i <= 200010; i++) {p[i] = Mul(p[i - 1], 2);}int T, u, v;cin >> T;while (T--) {cin >> n >> m;for (int i = 1; i <= n; i++) {cin >> a[i];// inite[i].clear();fa[i] = i;}for (int i = 1; i <= m; i++) {cin >> u >> v;Union(u, v, p[i]);}res = 0;dfs1(1, 0);dfs2(1, 0);cout << res << endl;}return 0;
}

A Very Easy Math Problem
Yukikaze and Smooth numbers


Divisibility

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll b, x;int main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int T;cin >> T;while (T--) {cin >> b >> x;if (b % x == 1) {cout << "T" << endl;} else {cout << "F" << endl;}}return 0;
}

Expectation · 矩阵树求生成树个数

http://acm.hdu.edu.cn/showproblem.php?pid=6836

生成树计数问题——矩阵树定理及其证明
矩阵树定理

官方题解

E(∑i=0302i)=∑i=030E(2i)=∑x×p(x)=∑i=0302i×p(2i)=∑i=0302i×权值里含有2i的生成树的个数生成树总数E(\sum_{i=0}^{30}2^i)=\sum_{i=0}^{30} E(2^i)=\sum x\times p(x)=\sum_{i=0}^{30} 2^i\times p(2^i)=\sum_{i=0}^{30}2^i\times \cfrac{权值里含有2^i的生成树的个数}{生成树总数}E(i=0∑30​2i)=i=0∑30​E(2i)=∑x×p(x)=i=0∑30​2i×p(2i)=i=0∑30​2i×生成树总数权值里含有2i的生成树的个数​

若要让生成树的权值含有 2i2^i2i ,显然生成树的每一条边的权值都要求含有 2i2^i2i,

利用矩阵树定理再求一遍所有含有 2i2^i2i 的边能构造出多少个生成树

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 998244353;
const int N = 1e2 + 10;
const int M = 1e5 + 10;
int n, m;ll res = 0, sum = 0;
int arr[N][N]; // 基尔霍夫矩阵
vector<vector<int>> vec;// n-1阶行列式
struct edge {int u, v, w;
} e[M];ll Mul(ll a, ll b) {return (a * b) % mod;
}ll Add(ll a, ll b) {return (a + b) % mod;
}ll Sub(ll a, ll b) {return (a - b + mod) % mod;
}ll qpow(ll a, ll b) {a %= mod;ll res = 1;while (b) {if (b & 1)res = Mul(res, a);b >>= 1;a = Mul(a, a);}return res;
}
// 计算行列式的值
ll Determinant(const vector<vector<int>> &A) {ll res = 1;int n = A.size(), cnt = 0;vector<vector<int>> B(n, vector<int>(n));for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {B[i][j] = A[i][j];}}for (int i = 0; i < n; i++) {int pivot = i;for (int j = i; j < n; j++) {if (abs(B[j][i]) > abs(B[pivot][i])) {pivot = j;}}if (i != pivot) {swap(B[i], B[pivot]); // 交换两行cnt ^= 1;}if (B[i][i] == 0) return 0;ll val = qpow(B[i][i], mod - 2);for (int j = i + 1; j < n; j++) {ll coe = Mul(B[j][i], val);for (int k = i; k < n; k++) {B[j][k] = Sub(B[j][k], Mul(coe, B[i][k]));}}}for (int i = 0; i < n; i++) {res = Mul(res, B[i][i]);}if (cnt) res = Sub(0, res);return res;
}int main() {ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int T;cin >> T;for (int cs = 1; cs <= T; cs++) {sum = res = 0;memset(arr, 0, sizeof arr);vec.clear();cin >> n >> m;for (int i = 1; i <= m; i++) {cin >> e[i].u >> e[i].v >> e[i].w;}for (int i = 1, u, v; i <= m; i++) {u = e[i].u;v = e[i].v;// 构造基尔霍夫矩阵arr[u][u]++, arr[v][v]++; // 增加度数arr[u][v]--, arr[v][u]--; // 边数取反}// 取第一个n-1阶行列式for (int i = 1; i < n; i++) {vec.push_back({});for (int j = 1; j < n; j++) {vec[i - 1].push_back(arr[i][j]);}}// 计算生成树的个数sum = Determinant(vec);for (int k = 0; k < 30; k++) {memset(arr, 0, sizeof arr);vec.clear();for (int j = 1, u, v; j <= m; j++) {u = e[j].u;v = e[j].v;if (e[j].w & (1ll << k)) {arr[u][u]++, arr[v][v]++;arr[u][v]--, arr[v][u]--;}}for (int i = 1; i < n; i++) {vec.push_back({});for (int j = 1; j < n; j++) {vec[i - 1].push_back(arr[i][j]);}}ll ans = Determinant(vec);if (!ans) continue;res = Add(res, Mul(1ll << k, ans));}res = Mul(res, qpow(sum, mod - 2));cout << res << endl;}return 0;
}

Kirakira

2020 Multi-University Training Contest 6相关推荐

  1. Sichuan University Programming Contest 2018 Preliminary

    嗯为了防止大家AK,所以这次的A题和K题我们就当做不存在好了! 经历了昨天写了两个多小时的博客没保存的心态炸裂,今天终于下了个Markdown.所以我猜这篇的格式应该会更好看一点! 好吧废话不多说 题 ...

  2. HDU 6091 - Rikka with Match | 2017 Multi-University Training Contest 5

    思路来自 某FXXL 不过复杂度咋算的.. /* HDU 6091 - Rikka with Match [ 树形DP ] | 2017 Multi-University Training Conte ...

  3. HDU 6051 - If the starlight never fade | 2017 Multi-University Training Contest 2

    /* HDU 6051 - If the starlight never fade [ 原根,欧拉函数 ] | 2017 Multi-University Training Contest 2 题意: ...

  4. HDU 6058 - Kanade's sum | 2017 Multi-University Training Contest 3

    /* HDU 6058 - Kanade's sum [ 思维,链表 ] | 2017 Multi-University Training Contest 3 题意:给出排列 a[N],求所有区间的第 ...

  5. 2017 Multi-University Training Contest - Team 3 Kanade's sum hd6058

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6058 题目: Kanade's sum Time Limit: 4000/2000 MS (J ...

  6. 2018 Multi-University Training Contest 3 Problem F. Grab The Tree 【YY+BFS】

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6324 Problem F. Grab The Tree Time Limit: 2000/1000 MS ...

  7. hdu 4925 Apple Tree--2014 Multi-University Training Contest 6

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4925 Apple Tree Time Limit: 2000/1000 MS (Java/Others ...

  8. HUST-2015 Multi-University Training Contest 9

    2015 Multi-University Training Contest 9 solutions BY xudyh 1001.Expression 记dp_{l,r}dp​l,r​​表示l,rl, ...

  9. 2018 Multi-University Training Contest 4 Problem E. Matrix from Arrays 【打表+二维前缀和】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6336 Problem E. Matrix from Arrays Time Limit: 4000/20 ...

  10. 2017 Multi-University Training Contest - Team 1

    2017 Multi-University Training Contest - Team 1 01     签到的 #include<bits/stdc++.h> using names ...

最新文章

  1. spring mvc velocity 配置备忘
  2. Codeforces Round #443 (Div. 2) B. Table Tennis
  3. 显示浏览器窗口的高度和宽度
  4. 十分简洁的手机浏览器 lydiabox
  5. php查询过滤字段,PHPelasticsearch过滤查询字符串搜索
  6. 初学HTML5系列二:HTML5新增的事件属性
  7. springboot整合mysql5.7_每天五分钟写K8(四):SpringBoot与mysql整合
  8. 一站式云原生智能告警运维平台——SLS新版告警发布!
  9. 激活函数active function
  10. java在线支付---06,07,08_在线支付_编写将数据提交给易宝支付的JSP页面,集成和测试向易宝发送支付请求,实现浏览器自动向易宝发送支付请求
  11. axure如何页面滑动时广告位上移_Axure案例:滑动输入,学会这一招,你就能超越80%的人...
  12. 程序员面试金典——4.4输出单层结点
  13. [转] 跨域资源共享 CORS 详解
  14. java三年面试题(分布式篇)不定期更新
  15. creator qt 字体太小_QtCreator的一些自定义代码字体和颜色
  16. 人工智能 之 机器学习常用算法总结 及 各个常用分类算法精确率对比
  17. BUUCTF:[WUSTCTF2020]alison_likes_jojo
  18. 麦乐积分:积分兑换系统对于积分运营的重要性
  19. UVALive 8076 Workout for a Dumbbell
  20. nacos-server1.4.1linux和windows版本下载

热门文章

  1. tan和cot的梗_sin对cos说,今晚我们是tan呢?还是cot呢?是什么意思?
  2. 利用谷歌搜索建立自己的站内搜索引擎
  3. 北方工业大学java_在北方工业大学就读是怎样的一种体验?
  4. python中数字转英文_python:将数字转换成用英文表达的程序
  5. c语言太极图编程语言,C语言画图之 画个太极图
  6. 大数据的核心价值是什么
  7. 启用或禁用笔记本自带键盘
  8. centos7安装Memcached
  9. 页面崩溃原因分析及解决
  10. EmguCV方形答题卡识别