埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 F

原创 2018年04月15日 17:12:02

1 + 2 = 3?
链接:https://www.nowcoder.com/acm/contest/91/F
来源:牛客网

题目描述
小Y在研究数字的时候,发现了一个神奇的等式方程,他屈指算了一下有很多正整数x满足这个等式,比如1和2,现在问题来了,他想知道从小到大第N个满足这个等式的正整数,请你用程序帮他计算一下。

(表示按位异或运算)

输入描述:
第一行是一个正整数,表示查询次数。

接着有T行,每行有一个正整数,表示小Y的查询。

输出描述:
对于每一个查询N,输出第N个满足题中等式的正整数,并换行。
示例1
输入
4
1
2
3
10
输出
1
2
4
18

题目分析:
这个题由于x+2x=3x 所以我们要异或 刚好是两数的和的,所以我们要找的数的二进制形式中不能有相邻的1,所以我们枚举一下前几种情况

0
1
10
100
101
1000
1001
1010
因此我们可以发现,每个相同位数为一组,每组的个数我们可以通过
f(n)=f(n-1)+f(n-2)来计算得出,再通过求一个前缀和,我们就可以算出第几个数在整个序列中是第几组,这一组我们计算最高为的1的权值,剩下的通过取余到前面去找即可

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+50;
ll a[maxn];
ll b[maxn];
ll bit[maxn];
int main()
{
    int t;
    scanf("%d",&t);
    a[1]=1;
    a[2]=1;
    a[3]=1;
    bit[1]=1;
    // bit[2]=2;
    for(int i=2; i<=63; i++)
    {
        bit[i]=bit[i-1]*2;
    }
   // cout<<bit[63]<<endl;
    for(int i=4; i<=64; i++)
    {
        a[i]=a[i-1]+a[i-2];
    }
    b[0]=0;
    //cout<<a[64]<<endl;
    for(int i=1; i<=64; i++)
    {
        b[i]=b[i-1]+a[i];
        //cout<<i<<" "<<b[i]<<endl;
    }
    //cout<<b[64]<<endl;
    while(t--)
    {
    ll n;
    scanf("%lld",&n);
    ll ans=0;
    ll index=n;
    while(index)
    {
        int t=upper_bound(b+1,b+64,index)-b;
        //cout<<t<<endl;
        index=index-b[t-1];
        ans+=bit[t-1];
    }
    printf("%lld\n",ans);
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/becky_w/article/details/79950924

【牛客网】【埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛】B—合约数【莫队做法】

题目链接:B—合约数题意:一棵树,有n个节点,从1编号到n。根节点的编号为p。给出每个节点的val[i]值,定义f(i)为以编号i为根节点的子树中(包括根节点),所有val[j]是合数并且是val[i...
  • gymgym1212
  • gymgym1212
  • 2018-04-15 20:33:28
  • 136

埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛F题 1+2=3?

题目链接:https://www.nowcoder.com/acm/contest/91/F题意:求第N个符合条件X^2X=3X的X。N&amp;lt;=10的12次方。解题思路:我刚开始想到最粗暴的...
  • weixin_36416680
  • weixin_36416680
  • 2018-04-16 11:01:00
  • 60

【牛客网】【埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛】L—K序列【动态规划】

题目链接:L—K序列题解:for一遍数组,temp[i]表示:不包括当前for到的点,序列和为i的最长长度。然后for一遍0-k,对dp[ (j+num[i])%k ]进行更新,dp[j]是包括当前点...
  • gymgym1212
  • gymgym1212
  • 2018-04-15 18:46:39
  • 170

埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 J-小Y写文章(二分+二分图匹配)

链接:https://www.nowcoder.com/acm/contest/91/J来源:牛客网题目描述 小Y写了一篇文章,他对自己的文笔很有自信,尤其是自己总结出了一套计算文章通顺性的公式。 ...
  • albertluf
  • albertluf
  • 2018-04-18 10:27:07
  • 76

K序列--埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛

链接:https://www.nowcoder.com/acm/contest/91/L来源:牛客网K序列时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 131072K,其他语言2621...
  • zitian246
  • zitian246
  • 2018-04-16 16:47:40
  • 45

埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 F-1+2=3?

链接:https://www.nowcoder.com/acm/contest/91/F来源:牛客网题目描述 小Y在研究数字的时候,发现了一个神奇的等式方程,他屈指算了一下有很多正整数x满足这个等式...
  • albertluf
  • albertluf
  • 2018-04-15 16:46:44
  • 133

埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛

B - 合约数 思路: &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;n...
  • hnust_Derker
  • hnust_Derker
  • 2018-04-15 19:06:59
  • 123

埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛A题Wasserstein Distance

题目链接:https://www.nowcoder.com/acm/contest/91/A题意:给两组数据,求把A变成B状态需花费的最小体力。思路:s=s+abs(a[i]-b[i]);a[i+1]...
  • weixin_36416680
  • weixin_36416680
  • 2018-04-15 20:11:56
  • 36

第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛(部分题解)

唉,好久没更新博客了,说明我这段时间在学习上都懈怠了Σ( ° △ °|||)︴昨天打了场金马赛,这网络…..我真的是无力吐槽…..前三题都是大水题,就不挂代码了;D-快速幂取模裸题#include u...
  • Murphyc
  • Murphyc
  • 2017-07-10 13:54:47
  • 484

埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 F 1 + 2 = 3?(找规律)

题目: 小Y在研究数字的时候,发现了一个神奇的等式方程,他屈指算了一下有很多正整数x满足这个等式,比如1和2,现在问题来了,他想知道从小到大第N个满足这个等式的正整数,请你用程序帮他计算一下。 (...
  • Tony5t4rk
  • Tony5t4rk
  • 2018-04-16 19:27:38
  • 23
收藏助手
不良信息举报
您举报文章:埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 F
举报原因:
原因补充:

(最多只允许输入30个字)