HDU-2017 多校训练赛7-1002-Build a tree
来源:互联网 发布:淘宝上的优惠券怎么用 编辑:程序博客网 时间:2024/06/17 18:49
ACM模版
描述
题解
官方题解:
其实就是
代码
#include <cstdio>#include <algorithm>using namespace std;typedef long long ll;const int MAXN = 111;const int MAGIC = 62;const ll INF = 0x3f3f3f3f3f3f3f3f;ll n, k, X;ll F[MAXN];ll C[MAXN];ll HR(ll a, ll n, ll k){ if (a + 1 <= n / k && (a + 1) * k < n) { return HR((a + 1) * k, n, k) + 1; } return 0;}ll HL(ll a, ll n, ll k){ if (a <= (n - 1) / k && a * k + 1 < n) { return HL(a * k + 1, n, k) + 1; } X = a; return 0;}ll slove(ll L, ll R, ll n, ll k){ ll hr = HR(R, n, k); ll hl = HL(L, n, k); if (L == R) { if (hr == hl) { return F[hr]; } if (L + 1 <= n / k && (L + 1) * k < n) { return (C[hr] + n - X) ^ slove(L * k + 1, (L + 1) * k, n, k); } return (C[hr] + n - X) ^ slove(L * k + 1, n - 1, n, k); } if (hr == hl) { if ((R - L + 1) & 1) { return F[hr]; } return 0; } ll mid = (L + R) >> 1; return slove(L, mid, n, k) ^ slove(mid + 1, R, n, k);}ll cal(ll n, ll m){ if (m == 1) { return 0; } if (n >= m) { if ((n - m + 1) & 1) { return m + cal(n - m, m >> 1); } return cal(n - m, m >> 1); } return cal(n, m >> 1);}int main(){ int T; scanf("%d", &T); while (T--) { scanf("%lld%lld", &n, &k); if (k == 1) { printf("%lld\n", cal(n, 1ll << MAGIC) + (((n + 1) / 2) & 1)); continue; } F[0] = 1; C[0] = 1; for (ll i = 1, s = INF - 1, j = 1; ; j++) { if (s / k < i) { break; } i *= k; s -= i; if (k & 1) { F[j] = F[j - 1]; } F[j] ^= INF - s; C[j] = C[j - 1] + i; } printf("%lld\n", slove(0, 0, n, k)); } return 0;}
阅读全文
0 0
- HDU-2017 多校训练赛7-1002-Build a tree
- HDU-2017 多校训练赛1-1003-Colorful Tree
- 2017 多校训练第一场 HDU 6035 Colorful Tree
- HDU-2017 多校训练赛1-1002-Balala Power!
- HDU-2017 多校训练赛6-1002-Mindis
- HDU-2017 多校训练赛8-1002-Battlestation Operational
- HDU-2017 多校训练赛10-1002-Array Challenge
- HDU-2017 多校训练赛7-1008-Hard challenge
- HDU-2017 多校训练赛7-1011-Kolakoski
- HDU-2017 多校训练赛7-补题
- 2017多校训练赛第一场 HDU 6035 Colorful Tree (dfs+正序统计)
- 【多校训练】hdu 6035 Colorful Tree 树状数组
- HDU-2017 多校训练赛1-1006-Function
- HDU-2017 多校训练赛1-补题
- HDU-2017 多校训练赛2-1009-TrickGCD
- HDU-2017 多校训练赛2-1003-Maximum Sequence
- HDU-2017 多校训练赛2-1011-Regular polygon
- HDU-2017 多校训练赛2-补题
- Shell脚本计算2-100的偶数和
- hihocoder#1300 : 展胜地的鲤鱼旗(dp)
- 进制转换(未完待续)
- hpuoj 1194: Judge
- HTML基础
- HDU-2017 多校训练赛7-1002-Build a tree
- NYOJ 32 组合数
- Java编程思想之容器深入研究
- 射线原理
- LightOJ 1370
- 关于NoSQL和SQL的区别
- LeetCode——557. Reverse Words in a String III
- 初学者入门web前端 C#基础知识:数组与集合
- CentOS安装maven