题解 | #求和#

求和

https://ac.nowcoder.com/acm/problem/53631

玄学做法:
打表找规律:

名称 缩写
a0a_0 1
a1a_1 3
a2a_2 8
a3a_3 20
a4a_4 48
... ...
ana_n 2an1+2n12*a_{n-1}+2^{n-1}

根据递推公式:an=2an1+2n1a_n=2*a_{n-1}+2^{n-1}
可以得到:an=n2n1+2na_n=n*2^{n-1}+2^{n}
逻辑做法:
注:10n2{10_n}_2表示二进制写法,1后面有n个0
对于ana_n,最终目标是10n2{10_n}_2。对于i=02nlowbit(i)\sum_{i=0}^{2^n}lowbit(i)相当于二进制从11加到10n2{10_n}_2,那么
10n2=10n12+10n22+...+1002{10_n}_2={10_{n-1}}_2+{10_{n-2}}_2+...+{10_{0}}_2
表示出来就可以得到an=i=0n1ai+2na_n=\sum_{i=0}^{n-1}a_i+2^{n}
=2an1+2n1=2*a_{n-1}+2^{n-1}
AC代码

#include <bits/stdc++.h>
#define end '\n'
using namespace std;
const long long mod = 998244353;
inline void IOS()
{
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
}
long long qpow(long long a, long long b)
{
    long long ans = 1;
    if(b<0)
        return 1;
    while (b)
    {
        if (b & 1)
            ans = ans * a % mod;
        a = a * a % mod;
        b >>= 1;
    }
    return ans;
}
unsigned long long n;
void dilingtian()
{
    __int128 ans = ((__int128)qpow(2, n - 1) * (__int128)n % (__int128)mod + (__int128)qpow(2, n)) % (__int128)mod;
    printf("%lld\n", (int)ans);
}
int main(void)
{
    // IOS();
    long long t;
    scanf("%lld",&t);
    while (t--)
    {
        scanf("%lld", &n);
        dilingtian();
    }
    return 0;
}
全部评论

相关推荐

会员标识
今天 16:28
已编辑
牛客运营
从03年的“北大毕业生卖猪肉”到前段时间上热搜的“北大博士入职城管”,这些年“下沉式就业”现象频繁牵动着大家的视野和目光吧,很吸睛?我觉得并不是,如果你说985大学生XXX,那可能成不了焦点,如果说是北大清华毕业生去当城管,卖猪肉,大家都会讨论一番,无论是谁都知道北大清华的过人之处。但是呢近些年的确有很多985、211名校毕业生选择到基层就业或回老家创业,会不会觉得大财小用?老家的哥哥,因为当时学的专业不是很好,但好在学校不错,一路本硕连读,毕业之后在上海打拼了2年,也攒了一些小钱,随后回村选择科学养鸡,买了很大一块地开始科学方法的养鸡、卖鸡蛋,村里的老人都会议论纷纷,白瞎了家里供你读书,又回...
下午吃泡馍:不是每一个脱下长衫的人在下沉市场重获新生,并不是每一个养猪养鸡的高学历人才都会成功。现实是很多人的“长衫”就是自己为数不多甚至唯一的底牌了,拼尽全力拿到一个不错的学历,这时候主流媒体告诉对方脱下长衫也可以活的精彩,其实真的挺难过的。强者恒强,但是弱者是人群的底色。 本质上是整个市场的问题,没有足够多的增长点,没有足够多的岗位,自上而下没有积极向上的氛围。外企撤出,供应链缺失...在发展的过程中总有阵痛,现阶段可能就是我们承受阵痛的过程。之前在牛客看到一个小伙伴说:时代的一粒灰尘,落在谁的身上,都将是无法承受之重!深有感触。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务