首页 > 其他分享 >洛谷 P9915 「RiOI-03」3-2 题解

洛谷 P9915 「RiOI-03」3-2 题解

时间:2024-01-19 19:11:48浏览次数:26  
标签:03 联通 int 题解 LL mod RiOI define

Preface

为啥有蓝啊,这题在机房里 15min 左右就切了,反倒是 2A 做了 1h。。

Solution

将矩阵逆时针旋转 \(90^{\circ}\),你会发现这是一棵线段树,是父亲左儿子的节点颜色是 \(0\),是右儿子的节点颜色是 \(1\)。

容易发现,联通块一定是一条链。具体地,你从给定的点向上跳,跳到第一个与自己异色的点,然后从这个点一路向下联通,可以联通到叶子。

我们令叶子那层是第 \(0\) 层,那么如果向上跳到的点深度为 \(d\),答案就是 \(\sum_{i=0}^{d}2^i=2^{d+1}-1\)。

判断 \(y\) 是否超出了 \(x\) 的最高位,如果是,说明能联通到根,答案为 \(2^n-1\);否则暴力向上跳即可。

时间复杂度 \(\mathcal{O}(q\log n)\)。

Code

#include <bits/stdc++.h>
#define REP(i, l, r) for (int i = (l); i <= (r); ++ i)
#define DEP(i, r, l) for (int i = (r); i >= (l); -- i)
#define fi first
#define se second
#define pb push_back
using namespace std;
namespace Milkcat {
    typedef long long LL;
    typedef pair<LL, LL> pii;
    const int N = 1e6 + 5, mod = 998244353;
    LL n, q, x, y;
    LL qpow(LL b, LL k) { LL r = 1; for (; k; b = b * b % mod, k >>= 1) if (k & 1) r = r * b % mod; return r; }
    int main() {
		cin >> n >> q;
		REP(test, 1, q) {
			cin >> x >> y;
			if (__lg(x) < y) {
				cout << (qpow(2, n) - 1 + mod) % mod << '\n';
			} else {
				int p = x >> y & 1;
				while ((x >> y & 1) == p) y ++;
				cout << (qpow(2, y) - 1 + mod) % mod << '\n';
			}
		}
        return 0;
    }
}
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int T = 1;
    while (T --) Milkcat::main();
    return 0;
}

标签:03,联通,int,题解,LL,mod,RiOI,define
From: https://www.cnblogs.com/Milkcatqwq/p/17975408

相关文章

  • CF1895E Infinite Card Game 题解
    Solution根据贪心策略,可以发现出完一张牌后对手的出牌是固定的。同理可以算出Monocarp出完一张牌\(a\)后下一次出的牌\(to_a\)。\(a\)和\(to_a\)胜负状态相同。可以发现对所有\(a\)建\(a\toto_a\)后形成的图是内向基环树,一遍dfs即可求出答案。时间复杂度\(\m......
  • 假期学习记录03
    继续学习了scala语言数据结构:容器列表LIst不可变对象序列,一旦进行初始化,后不可以在被修改进行初始化在已有列表前端添加元素,通过::进行实现需要注意的是。这不会进行修改操作,而是直接生成了另一个List集合不重复元素的集合,包括可变集合和不可变集合若进行导包,导入muta......
  • /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found问题解决
    有一个go实现的项目代码最近有更新,自己在开发环境上手动构建并运行都没有问题(构建和运行时相同环境,肯定没有问题^_^)。后面通过jenkins构建镜像也没有问题,运行时却报错 之前的版本在jenkins上构建也是成功的,后沟通得知jenkins集群版本最近有更新 那么,大概知道原因了,由于jenk......
  • 003 Salesforceの基本的なキーワードを理解する
    0.はじめにこれから業務でSalesforceを使い始める人は事前に基本的なキーワードを確認することで運用開始に役立てていただければとおもいます。またすでにSalesforceを運用している人にとっても改めて見直すことにより利用の幅を広げていただけるかもしれません。1.主な製品S......
  • 2-STM32F103+EC800K(移远4G Cat1)远程升级篇(阿里云物联网平台)-STM32F103使用EC800K
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ZLIOTB/EC800K/aliyunota.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p>  ......
  • 详解Process object has no attribute '_popen'
    详解Processobjecthasnoattribute'_popen'最近在使用Python的multiprocessing模块进行多进程编程时,遇到了一个奇怪的错误:Processobjecthasnoattribute'_popen'。这个错误消息看起来很奇怪,让人摸不着头脑。错误背景在使用multiprocessing模块创建子进程时,通常会创建一个Pr......
  • CF1214E题解
    PetyaandConstructionSet题目传送门题解一个构造题,结论挺容易猜的。观察到关键信息:\(d_i\len\)。所以我们先把所有奇数编号的点按对应的\(d\)从大到小组成一条链,然后依次考虑偶数号点应该接在链上的哪个点后,容易知道这个点为链上的第\(i+d-1\)个。特殊的,如果接在了最后......
  • CF150C题解
    SmartCheater题目传送门题解首先显然的,每个乘客是独立计算的,然后我们发现,一个乘客在\(i\)到\(i+1\)不买票的期望贡献是一定的,为\(\dfrac{x_{i+1}-x_i}{2}-c*p_i\),所以我们其实就是要对于每个乘客的区间求最大子段和,简单线段树板子,感觉也没啥细节。代码:#include<bits/st......
  • CF1286C1题解
    Madhouse(Easyversion)题目传送门题解这种水题还能有蓝?不能因为困难版是黑就把简单版难度往上强拉啊!第一次问\([1,n]\),第二次问\([1,n-1]\),把读入的所有字符串先各自内部把字符排序(反正本来就是乱序)后存入map,第一次询问有,第二次询问没有的字符串就是原串后缀的乱序,都找出......
  • NOIP2023题解
    目录NOIP2023T1词典(dict)T2三值逻辑(tribool)T3双序列拓展(expand)T4天天爱打卡(run)NOIP2023T1词典(dict)考察:贪心题解Link题目传送门首先任意多次操作本质就是随意排序,所以如果要使\(w_i\)最小,我们一定会使\(w_i\)从\(a\)到\(z\)排,其它都\(z\)到\(a\)排......