博弈 1002 ZYB's Game

题意:中文

分析:假定两个人是绝顶聪明的,一定会采取最优的策略.所以如果选择X的左边的一个点,那么后手应该选择X的右边对称的点,如果没有则必输,否则必胜,然后再分析下就是奇数是1,偶数是0

树状数组+二分(逆序数) 1003 ZYB's Premutation

题意:已知每个点前缀逆序对数和,求原排列

分析:可以得知每个点前面有几个比它大,那么用树状数组维护,二分查询从i到n有几个数字,那么答案是i-1

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. const int N = 5e4 + 5;
  7. int A[N], B[N], a[N];
  8. struct BIT {
  9. int c[N], sz;
  10. void init(int n) {
  11. memset (c, 0, sizeof (c));
  12. sz = n;
  13. }
  14. void updata(int i, int x) {
  15. while (i <= sz) {
  16. c[i] += x;
  17. i += i & (-i);
  18. }
  19. }
  20. int query(int i) {
  21. int ret = 0;
  22. while (i) {
  23. ret += c[i];
  24. i -= i & (-i);
  25. }
  26. return ret;
  27. }
  28. int bsearch(int l, int r, int k) {
  29. int ret = 0, rr = r;
  30. while (l <= r) {
  31. int mid = (l + r) >> 1;
  32. int cnt = query (rr) - query (mid);
  33. if (cnt == k) {
  34. ret = mid; r = mid - 1;
  35. }
  36. else if (cnt > k) l = mid + 1;
  37. else r = mid - 1;
  38. }
  39. return ret;
  40. }
  41. }bit;
  42. int n;
  43.  
  44. int main(void) {
  45. int T; scanf ("%d", &T);
  46. while (T--) {
  47. scanf ("%d", &n);
  48. for (int i=1; i<=n; ++i) {
  49. scanf ("%d", &A[i]);
  50. }
  51. B[0] = 0;
  52. for (int i=2; i<=n; ++i) {
  53. B[i] = A[i] - A[i-1];
  54. }
  55. bit.init (n);
  56. for (int i=1; i<=n; ++i) {
  57. bit.updata (i, 1);
  58. }
  59. for (int i=n; i>=1; --i) {
  60. a[i] = bit.bsearch (1, n, B[i]);
  61. bit.updata (a[i], -1);
  62. }
  63. for (int i=1; i<=n; ++i) {
  64. printf ("%d%c", a[i], i == n ? '\n' : ' ');
  65. }
  66. }
  67.  
  68. return 0;
  69. }

树形DP 1004 ZYB's Tree

题意:一棵树,求所有点它到其他点的距离不大于K的个数的异或和 

分析:dp[u][i] 表示u到子孙的距离为i的点的个数,dp[u][i+1] += dp[v][i].dp2[v][i] 表示v到上面的距离为i的点的个数,dp[v][i+1] += dp2[u][i] + dp[u][i] - dp[v][i-1]

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. const int N = 5e4 + 5;
  7. int A[N], B[N], a[N];
  8. struct BIT {
  9. int c[N], sz;
  10. void init(int n) {
  11. memset (c, 0, sizeof (c));
  12. sz = n;
  13. }
  14. void updata(int i, int x) {
  15. while (i <= sz) {
  16. c[i] += x;
  17. i += i & (-i);
  18. }
  19. }
  20. int query(int i) {
  21. int ret = 0;
  22. while (i) {
  23. ret += c[i];
  24. i -= i & (-i);
  25. }
  26. return ret;
  27. }
  28. int bsearch(int l, int r, int k) {
  29. int ret = 0, rr = r;
  30. while (l <= r) {
  31. int mid = (l + r) >> 1;
  32. int cnt = query (rr) - query (mid);
  33. if (cnt == k) {
  34. ret = mid; r = mid - 1;
  35. }
  36. else if (cnt > k) l = mid + 1;
  37. else r = mid - 1;
  38. }
  39. return ret;
  40. }
  41. }bit;
  42. int n;
  43.  
  44. int main(void) {
  45. int T; scanf ("%d", &T);
  46. while (T--) {
  47. scanf ("%d", &n);
  48. for (int i=1; i<=n; ++i) {
  49. scanf ("%d", &A[i]);
  50. }
  51. B[0] = 0;
  52. for (int i=2; i<=n; ++i) {
  53. B[i] = A[i] - A[i-1];
  54. }
  55. bit.init (n);
  56. for (int i=1; i<=n; ++i) {
  57. bit.updata (i, 1);
  58. }
  59. for (int i=n; i>=1; --i) {
  60. a[i] = bit.bsearch (1, n, B[i]);
  61. bit.updata (a[i], -1);
  62. }
  63. for (int i=1; i<=n; ++i) {
  64. printf ("%d%c", a[i], i == n ? '\n' : ' ');
  65. }
  66. }
  67.  
  68. return 0;
  69. }

BestCoder Round #65的更多相关文章

  1. Bestcoder round #65 && hdu 5593 ZYB's Tree 树形dp

    Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...

  2. Bestcoder round #65 && hdu 5592 ZYB's Premutation 线段树

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...

  3. BestCoder Round #65 hdu5591(尼姆博弈)

    ZYB's Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  4. BestCoder Round #65 hdu5590(水题)

    ZYB's Biology Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  5. hdu 5592 BestCoder Round #65(树状数组)

    题意: ZYB有一个排列PP,但他只记得PP中每个前缀区间的逆序对数,现在他要求你还原这个排列. (i,j)(i < j)(i,j)(i<j)被称为一对逆序对当且仅当A_i>A_jA ...

  6. hdu 5591 BestCoder Round #65(博弈)

    题意: 问题描述 ZYBZYB在远足中,和同学们玩了一个“数字炸弹”游戏:由主持人心里想一个在[1,N][1,N]中的数字XX,然后玩家们轮流猜一个数字,如果一个玩家恰好猜中XX则算负,否则主持人将告 ...

  7. BestCoder Round #65 (ZYB's Premutation)

    ZYB's Premutation Accepts: 220 Submissions: 983 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...

  8. BestCoder Round #65 (ZYB's Game)

    ZYB's Game Accepts: 672 Submissions: 1207 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536 ...

  9. BestCoder Round #65 (ZYB's Biology)

    ZYB's Biology Accepts: 848 Submissions: 1199 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 13 ...

随机推荐

  1. September 30th 2016 Week 40th Friday

    Elegance is the only beauty that never fades. 优雅是唯一不会褪色的美. Even the most beautiful apperance may los ...

  2. 【转】深入Windows内核——C++中的消息机制

    上节讲了消息的相关概念,本文将进一步聊聊C++中的消息机制. 从简单例子探析核心原理 在讲之前,我们先看一个简单例子:创建一个窗口和两个按钮,用来控制窗口的背景颜色.其效果 图1.效果图  Win32 ...

  3. Android错误:Re-installation failed due to different application signatures

    Re-installation failed due to different application signatures (2013-04-20 14:27:32) 转载▼ 标签: 解决方法 问题 ...

  4. vector< vector<int> >类似于二维数组

    vector< vector<int> > intVV; vector<int> intV; int i,j; ;i<;++i){ intV.clear(); ...

  5. C#回顾 – 4.IEnumerable 集合

         

  6. HTML5学习之视频与音频(三)

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  7. 使用RMAN DUPLICATE...FROM ACTIVE DATABASE创建物理standby database

    Applies to: Oracle Server - Enterprise Edition - Version 11.1.0.6 to 11.2.0.4 [Release 11.1 to 11.2] ...

  8. 华为Mate8 NFC 时好时坏,怎么解决呢?

    拿起手机朝桌子上磕几下,nfc就好用了.这是花粉总结的,我也试过,很灵.注意要带套,摄像头朝下,头部低一点往下磕.因为nfc芯片在头部,估计是接触不良.

  9. PHP日期操作类代码-农历-阳历转换、闰年、计算天数等

    <?php class Lunar { var $MIN_YEAR = 1891; var $MAX_YEAR = 2100; var $lunarInfo = array( array(0,2 ...

  10. Parallel.js初探续集

    @author mrbean 例子均来源于github parallel.js 昨天写的第一篇今天一看居然有50+的阅读量了,感觉很激动啊,但是也有点害怕毕竟这只是自己笔记性质的一点东西,所以赶紧拿起 ...