hdu 6121 Build a tree
来源:互联网 发布:漫画下载软件 编辑:程序博客网 时间:2024/06/05 17:54
对于树的每一层,我们可以分为三种节点,①满节点的k叉树②不满的k叉树③比第一种情况少一层的满节点的k叉树,然后从叶子节点开始不断转移到上一层。
对于k=1进行特判,打表找规律。。。。真TM刺激。。。爽的不行不行的,感觉看了题解是很容易,但是自己去想,一步步不出错,还是要有一定的脑洞的
#include<bits\stdc++.h>using namespace std;typedef long long ll;int main(){int t;scanf("%d",&t);while(t--){ ll n,k; cin>>n>>k; if(k==1) { ll tt=n%4; if(tt==1)printf("1\n"); else if(tt==2)printf("%lld\n",n+1); else if(tt==3)printf("0\n"); else printf("%lld\n",n); continue; } ll s,remain,a,b,c; a=b=c=0; s=k; ll sum=1,flag=0; while(sum+s<=n) { sum+=s; if((double)s>1e18/(double)k)//可能会越界, { flag=1; break; } s*=k; } remain=n-sum; ll vala,valb,valc; vala=k+1; valb=(remain%k)==0?0:remain%k+1; valc=1; a=remain/k; b=remain%k==0?0:1; if(flag==0)s/=k; c=s-a-b; ll ans=remain%2; while(a+b+c>1) { if(a%2)ans^=vala; if(b%2)ans^=valb; if(c%2)ans^=valc; if(a%k||c%k)b=1; valb=a%k*vala+(k-b-a%k)*valc+1+valb; a/=k; vala=k*vala+1; c/=k; valc=k*valc+1; } cout<<(ans^n)<<endl;} return 0;}
阅读全文
0 0
- HDU 6121 Build a tree
- hdu 6121 Build a tree
- hdu 6121 Build a tree
- HDU 6121Build a tree
- hdu--6121--Build a tree
- hdu--6121:Build a tree
- hdu 6121 Build a tree
- HDU-6121 Build a tree
- hdu 6121 Build a tree
- HDU 6121 Build a tree【】
- HDU 6121 Build a tree [想法题]
- HDU 6121 Build a tree [想法题]
- hdu 6121 Build a tree (模拟)
- HDU 6121 Build a tree (技巧)
- hdu 6121 Build a tree (图论)
- HDU 6121 Build a tree(递归)
- hdu 6121(Build a tree) 瞎搞+麻烦
- HDU 6121 Build a tree(找规律+implement)
- GitHub上最火的Android开源项目,所有开源项目都有详细资料和配套视频
- java中HashSet详解
- 机器学习(三)决策树算法Decision Tree
- mysql 配置问题
- 智融集团:以人工智能风控技术,淬炼金融圈“最强大脑”
- hdu 6121 Build a tree
- android 向系统插入一条通话记录
- 文章标题 HDU 1533 : Going Home (最小费用最大流)
- vim 主题失效
- HDU6127-Hard challenge
- 新的开始
- Java之IO(一)
- 用grunt搭建自动化的web前端开发环境(一)介绍 【转载自博客园王福朋】
- 2107图的深度遍历