zoukankan      html  css  js  c++  java
  • (思维题)HDU

    题意:

    给一颗K叉树,统计所有子树大小的异或和,节点数n和k都小于1e18。

    分析:

    比赛时候一开始被公式搞懵逼了,然后队友30分钟就A掉了。

    昨天自己写了一下,哇好难写,各种bug,什么时候自己的代码能力这么弱了- -。

    其实也很简单,因为n个节点分成K叉树,最后一层必然出现三种情况。

    一种是满K叉,一种是不满K叉,还有一种是上一层满叉。

    只要知道每一层,存在不满K叉的子树是第几叉,然后就能推算出前面满K叉的数量,和后面不满K叉的数量。

    根据异或的性质,判一下奇偶,然后ans异或左边子树大小(可以预处理,也可以递归时候保存)。

    同理右边的就是去掉一层的子树。最后对于中间单独不满K叉的,用一个变量统计节点个数即可。

    (写的时候,各种bug。返回值没用longlong找了一个多小时。。。

    代码很短:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 long long n, k;
     5 long long ans, dep, du, pw[100];
     6 
     7 long long dfs(long long d, long long tol, long long lotol) {
     8     dep++;
     9     pw[dep - 1] = tol;
    10     if(tol >= n) {
    11         long long idx = lotol - tol + n - 1;
    12         if((idx + 1) & 1)ans ^= 1;
    13         du = idx % k + 1;
    14         return idx / k;
    15     }
    16     long long idx = dfs( d + 1, tol + lotol * k, lotol * k);
    17     du++;
    18     ans ^= du;
    19     if(idx & 1)ans ^= pw[dep - d];
    20     if((lotol - idx - 1) & 1)ans ^= pw[dep - d - 1];
    21     du += (idx % k) * pw[dep - d] + (k - idx % k - 1) * pw[dep - d - 1];
    22     return idx / k;
    23 }
    24 
    25 long long xor_n(long long g) {
    26     long long t = g & 3;
    27     if (t & 1) return t / 2 ^ 1;
    28     return t / 2 ^ g;
    29 }
    30 
    31 int main() {
    32     int t;
    33     scanf("%d", &t);
    34     while(t--) {
    35         ans = dep = 0;
    36         scanf("%lld%lld", &n, &k);
    37         if(k == 1) {
    38             printf("%lld
    ", xor_n(n));
    39             continue;
    40         }
    41         dfs(1, 1, 1);
    42         printf("%lld
    ", ans);
    43     }
    44     return 0;
    45 }
  • 相关阅读:
    Angular2学习笔记四(之Http通信)
    立即掌握SSM框架的要诀
    How to delete the eclipse plugin.
    eclipse(Version: Mars.2 Release (4.5.2)) groovy plugin install process.
    初学ssm框架的信息
    Maven安装教程
    基于Java Mail 进行发送(带附件和压缩附件)的邮件
    基于POI和DOM4将Excel(2007)文档写进Xml文件
    datatables 行创建回调
    datatables表格中 嵌套表格问题
  • 原文地址:https://www.cnblogs.com/tak-fate/p/7410718.html
Copyright © 2011-2022 走看看