首页 > 其他分享 >Codechef-Cringe Queries

Codechef-Cringe Queries

时间:2022-11-23 16:56:15浏览次数:87  
标签:ch return int siz while Queries mod Cringe Codechef

这题的代码很短,但是建模很有思维含量,好题,记录一下

题意:

给定n,q,表示一个数组长度为n(初始下标从1开始),初始时全为0
总共有q种操作,每个操作给定一个区间[l,r]
表示可以将这个区间[l,r]取反
问:经过若干次上述q种操作后,可以得到多少不同的序列,答案对998244353取模

link: https://www.codechef.com/problems-old/CRINGEQUERY

题解

我们考虑建立一个\(b\)数组,\(b[i]\)=\(a[i]\)^\(a[i+1]\),长度为\(n+1\),下标范围\([0,n]\)
但是为什么是异或呢?大概是这样可以表示区间端点?
对于每一个操作\([l,r]\),\(b[l-1]\)和\(b[r]\)显然会发生变化,因为更改了\(b[l]\)和\(b[r]\)的值
于是我们可以在\(l-1\)和\(r\)之间连一条边,建一张无向图
一张图中可能有多个部分,对于每个部分,我们计算它的 边数\(siz\),它的贡献方案为 \(2^{siz-1}\)
由于每个部分互不联通,每个块贡献分开,于是分别计算它们的\(siz\),贡献方案为 \(2^{siz-1}\)
最后每个块的贡献相乘就是得到的不同序列的方案数

Code


#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N=1e6+10;
const int mod=998244353; 

int read() {

	int x=0,f=1;
	char ch=getchar();
	while(ch<48||ch>57) {
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(ch>=48&&ch<=57) {
		x=(x<<3)+(x<<1)+(ch^48);
		ch=getchar();
	}
	return x*f;

}

int n,q;
int vis[N],siz=0;
vector<int> p[N];

int mul(int x,int y) {
	return x*y%mod;
}

int ksm(int a,int b) {
	
	int ans=1;
	while(b) {
		
		if(b&1) ans*=a,ans%=mod;
		a=(a*a)%mod;
		b>>=1;
		
	}
	return ans;
	
}

void dfs(int x) {
	
	if(vis[x]) return ;
	vis[x]=1;
	siz++;
	for(int i=0;i<p[x].size();i++) {
		int y=p[x][i];
		dfs(y);
	}
	
}

signed main() {
	
	n=read();
	q=read();
	while(q--) {
		
		int l=read(),r=read();
		p[l-1].push_back(r);
		p[r].push_back(l-1);
		
	}
	int ans=1;
	for(int i=0;i<=n;i++) {
		
		if(vis[i]) continue;
		siz=0;
		dfs(i);
		ans=mul(ans,ksm(2,siz-1));
		
	}
	printf("%lld\n",ans);
	
	return 0;
}

标签:ch,return,int,siz,while,Queries,mod,Cringe,Codechef
From: https://www.cnblogs.com/Diamondan/p/16918915.html

相关文章

  • HDU 3726 Graph and Queries
    DescriptionYouaregivenanundirectedgraphwithNvertexesandMedges.Everyvertexinthisgraphhasanintegervalueassignedtoitatthebeginni......
  • F. MEX Queries
    F.MEXQueries分析不得不说,题目不算难。但是非常考验选手的基础。我会把我出的问题放出到最后,给大家一些错误提示。我们使用动态开点维护权值线段树。我们先来看四个......
  • LeetCode 2458. Height of Binary Tree After Subtree Removal Queries
    原题链接在这里:https://leetcode.com/problems/height-of-binary-tree-after-subtree-removal-queries/题目:Youaregiventhe root ofa binarytree with n node......
  • CodeChef Match the Streams
    题目链接:​​传送门​​题目中的pdf翻译:题目描述:给定两个序列和。定义序列和的相似度为满足的下标的数量。你需要回答个询问。每个询问给定参数,你需要将更改为,然后计算序......
  • CodeChef SHGAME
    #include<bits/stdc++.h>#defineintlonglongusingnamespacestd;inttong1[2323233],tong2[2323233];signedmain(){intT;cin>>T;while(T--)......
  • ABC246Ex 01? Queries 题解
    ABC246Ex01?QueriesSolution目录ABC246Ex01?QueriesSolution更好的阅读体验戳此进入浅谈DDP与广义矩阵乘法(戳此进入)引入例题#1广义矩阵乘法DDP例题#0例题#0.5......
  • Entity Framework教程-LINQ查询(LINQ for Queries and Projections)
    更新记录转载请注明出处:2022年10月17日发布。2022年10月10日从笔记迁移到博客。懒加载与预加载默认情况下,EF是懒加载的,能只取一行数据就只取一行如果需要预先加......
  • Prefix Function Queries
    传送门感觉字符串只会hash了。这里提几点易错点:①字符串能不用string就不用。反正这道题因为string的size(不能正常清空)和读入Wa飞了②hash都写双模数。......
  • Codeforces1695 D1.+D2 Tree Queries
    题意给一个n个点的无向图,其中有一个隐藏点X,可以进行一组询问S来确定S是n个节点中的哪个点。S包括k个询问节点。询问返回的值也为k个值,每个值为X点到每个询问节点的最短路......
  • spring.jpa.open-in-view is enabled by default. Therefore, database queries may b
    在搭建微服务的过程中,发现控制台一直在报这个警告日志。本着研究的目的,查看了下源码[WARN][JpaBaseConfiguration$JpaWebConfiguration][219]:spring.jpa.open-in-viewi......