LINK:Perfect Triples

初看这道题 一脸懵逼..

完全没有思路 最多就只是发现一点小规律 即。

a<b<c. 且b的最大的二进制位一定严格大于a b的最大二进制位一定等于c.

但是这对解题没有任何用处。

考虑打个表看看有什么规律没有.

通过这道题 我承认 打表找规律也是一个技术活.

虽然能看出来到了第二排 a的数值是递增的 考虑特判前面几个我们就能快速找到a了.

但是b 和 c还是难找。那继续观察后面几项的规律。

我的败笔也是出自这里 规律一般也是符合较小的数据的 没道理不符合1~15这些数值。

我找了10min 失败 虽然勉强看出来4个为一组 但是还是难以找到b,c的规律。无法快速定位。

但是这不是考试 可以不用自闭了。

翻了一篇题解 那篇题解上给了一个比较猛的规律.

这个是一个以三个数字为节点的四叉树。

考虑把这个四叉树画出来 可以惊奇的发现 儿子和父亲有很大的联系。

仔细观察第一个节点(1,2,3) 和第一个儿子(4,8,12).

简单的得到 前者二进制位左移两位得到后者。

考虑第一个节点的第二个儿子 显然由第一个儿子加上(1,2,3)得到。第三个儿子由第一个儿子加上(2,3,1)得到。第四个儿子由第一个儿子加上(3,1,2)得到。

至此 我们直接从根节点一路下来定位即可 由于是四叉树 所以每次查询是log4(n)的复杂度。

这道题告诉我 规律要从小的地方开始找 且一般都符合较小的数字集。这样容易看出来。

实际上 输出也很难搞 我想了20min yy出来一个方法。

由父亲定位过于困难 定位父亲较为简单。

可以发现这是一个层数前缀和的形式 先定位层数。这个可以利用前缀和搞。

然后就可以定位到父亲的位置了 然后把自己的位置变成父亲的第几个儿子。

这样再从上往下做就很容易了。注意直接定位父亲的做法是错误的 因为这是一个前缀的形式很可能定位错误。

const ll MAXN=100010;
ll n,T,top;
ll s[MAXN],a,b,c;
ll p[MAXN],maxx,sum[MAXN];
int main()
{
freopen("1.in","r",stdin);
get(T);p[0]=1;maxx=27;sum[0]=1;
rep(1,maxx,i)p[i]=p[i-1]*4,sum[i]+=sum[i-1]+p[i];
//putl(sum[maxx]);
while(T--)
{
get(n);top=0;
ll ww=(n-1)/3+1;
ll cc=n%3==0?3:n%3;
ll w1=0;
while(sum[w1]<ww)++w1;
ww=ww-(w1==0?0:sum[w1-1]);
while(w1)
{
ll p1=(ww-1)/4+1;
s[++top]=ww-(p1-1)*4;
ww=p1;--w1;
}
a=1;b=2;c=3;
while(top)
{
a=a<<2;b=b<<2;c=c<<2;
if(s[top]==2)a+=1,b+=2,c+=3;
if(s[top]==3)a+=2,b+=3,c+=1;
if(s[top]==4)a+=3,b+=1,c+=2;
--top;
}
if(cc==1)putl(a);
if(cc==2)putl(b);
if(cc==3)putl(c);
}
return 0;
}

CF R 633 div 1 1338 C. Perfect Triples 打表找规律的更多相关文章

  1. Tetrahedron(Codeforces Round #113 (Div. 2) + 打表找规律 + dp计数)

    题目链接: https://codeforces.com/contest/166/problem/E 题目: 题意: 给你一个三菱锥,初始时你在D点,然后你每次可以往相邻的顶点移动,问你第n步回到D点 ...

  2. Codeforces Round #493 (Div. 2)D. Roman Digits 第一道打表找规律题目

    D. Roman Digits time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  3. CF R 209 div 2 CF359B Permutation 构造

    LINK:Permutation 休闲一下 开了一道构造题. 看起来毫无头绪 其实仔细观察第二个条件 0<=2k<=n. 容易想到当n是奇数的时候 k的范围更小 再手玩一下第一个条件 容易 ...

  4. Codeforces Round #242 (Div. 2) C. Magic Formulas (位异或性质 找规律)

    题目 比赛的时候找出规律了,但是找的有点慢了,写代码的时候出了问题,也没交对,还掉分了.... 还是先总结一下位移或的性质吧: 1.  交换律 a ^ b = b ^ a 2. 结合律 (a^b) ^ ...

  5. hdu-3524 Perfect Squares---打表+找规律+循环节

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3524 题目大意: 求i^2 mod 2^n有多少可能 解题思路: 先打表,求出n较小的时候的数据 n ...

  6. Codeforces Round #493 (Div. 1) B. Roman Digits 打表找规律

    题意: 我们在研究罗马数字.罗马数字只有4个字符,I,V,X,L分别代表1,5,10,100.一个罗马数字的值为该数字包含的字符代表数字的和,而与字符的顺序无关.例如XXXV=35,IXI=12. 现 ...

  7. 【博弈论】【SG函数】【找规律】Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) E. Game of Stones

    打表找规律即可. 1,1,2,2,2,3,3,3,3,4,4,4,4,4... 注意打表的时候,sg值不只与剩下的石子数有关,也和之前取走的方案有关. //#include<cstdio> ...

  8. CF Round #510 (Div. 2)

    前言:没想到那么快就打了第二场,题目难度比CF Round #509 (Div. 2)这场要难些,不过我依旧菜,这场更是被\(D\)题卡了,最后\(C\)题都来不及敲了..最后才\(A\)了\(3\) ...

  9. 竞赛题解 - CF Round #524 Div.2

    CF Round #524 Div.2 - 竞赛题解 不容易CF有一场下午的比赛,开心的和一个神犇一起报了名 被虐爆--前两题水过去,第三题卡了好久,第四题毫无头绪QwQ Codeforces 传送门 ...

随机推荐

  1. Face The Right Way思维。。。

    题目再次链接 题意: 已知01序列a,求进行定长子串取反的最少操作次数,以及最少时的定长. 分析: 首先,先想一想怎么暴力吧.这样想:要保证最小,那么必然不会对同一个区间反转两次,而在k一定时,则不会 ...

  2. YAML 语言教程与使用案例

    YAML语言教程与使用案例,如何编与读懂写YAML文件. YAML概要 YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)的递归缩写.在开发的这种 ...

  3. MCU 51-1概述

    Microcontroller Unit 单片机:将微处理器CPU.存储器(RAM.ROM) .基本输入/输出(I/O) 接口电路和总线接口等组装在一块主机板(即微机主板). 微型计算机:将微处理器C ...

  4. TB6560电机驱动器参数设置

    TB6560电机驱动器参数设置 最近接触了一些步进电机的开发,整理了一些参数设置的经验,希望能帮助到有需要的人儿~ 步进电机主要按一定的给电规律,给对应的绕组响应的电信号,电机将按一定的方向运行,而且 ...

  5. CentOS7安装Oracle 11g

    准备工作 1.下载Oracle安装包:linux.x64_11gR2_database_1of2.zip 和 linux.x64_11gR2_database_2of2.zip ,可以下载到本地,通过 ...

  6. 01 flask源码剖析之werkzurg 了解wsgi

    01 werkzurg了解wsgi 目录 01 werkzurg了解wsgi 1. wsgi 2. flask之werkzurg源码流程 3. 总结 1. wsgi django和flask内部都没有 ...

  7. 【JS代码压缩】使用YUI Compressor对js文件进行压缩处理

    概述 在使用html5开发Hybird APP的时候,可能会引入大量的js包,另外对于一些核心的js文件,进行一些特殊的处理, 如压缩和加密就显得很重要了,YUI Compressor就是这样一个用于 ...

  8. mysql中常见约束

    #常见约束 /* 含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性 分类:六大约束 NOT NULL:非空,用于保证该字段的值不能为空 比如姓名.学号等 DEFAULT:默认,用于 ...

  9. Java中使用方法的注意事项

    Java方法使用的注意事项 本文列举了几个小白在java中使用方法应该注意的几个地方 1. 方法应该定义在类中2.方法中不可以再嵌套方法3.方法定义的前后顺序无所谓4.想要执行方法必须要调用5.如果方 ...

  10. 阅读手札 | 手把手带你探索『图解 HTTP』

    前言 本文已经收录到我的 Github 个人博客,欢迎大佬们光临寒舍: 我的 Github 博客 学习清单: 一.网络基础 TCP/IP 通常使用的网络(包括互联网)是在 TCP/IP 协议族的基础上 ...