Codeforces Round 875 (Div. 2)

news2024/12/27 13:48:02

Problem - D - Codeforces

思路:

  1. 注意到bi+bj<=2*n,所以ai*aj<=2*n,即我们实际只需要枚举\sqrt{2*n}个a的匹配即可
  2. 为了不重不漏,我们可以枚举x从1到\sqrt{2*n},寻找所有与x匹配且大于等于x的[a,b]对
  3. 这样复杂度就是n\sqrt{2*n}
#include <bits/stdc++.h>
using namespace std;
#define ll               long long
#define endl             "\n"
typedef pair<int, int> pii;
const int N = 2e5 + 10;
void mysolve()
{
	int n;
	cin>>n;
	vector<pii>a(n);
	for(int i=0; i<n; ++i)cin>>a[i].first;
	for(int i=0; i<n; ++i)cin>>a[i].second;
	sort(a.begin(),a.end());
	ll ans=0;
	for(int x=1; x*x<=2*n; ++x)
		{
			vector<int>cnt(n+1);//枚举x,x只与大于大于他的a匹配,显然在遇到pip前,如果真的存在a=x,我们可以存入每个x=a对应的b
			for(auto [k,v]:a)
				{
					int b=k*x-v;
					if(b>0&&b<=n)///b符合范围
						{
							ans+=cnt[b];
						}
					if(k==x)cnt[v]++;//在遇到a匹配前,先计入a=x的各个b的数目
				}
		}
	cout<<ans<<endl;
}

int32_t main()
{
	std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);//使用read请把解绑注释了
	int t=1;
	cin >> t;
	//read(t);
	while (t--)
		{
			mysolve();
		}
	system("pause");
	return 0;
}

Problem - E - Codeforces

思路:

  1. 设左括号为1,右括号为-1
  2. 如果一个括号序列是合法的,必须满足所以前缀都是>=0的,而且所有后缀都是<=0的
  3. 要求[l,r]是合法序列,如果没有[l,r]之间的区间交,显然答案就是被割裂开的每个偶数段(存在奇数段就是无解)的卡特兰数乘积
  4. 如果[l1,r1]与[l2,r2]相交,观察出[l2,r1]也必须是合法括号序列,因为[l2,r1]同时满足第一个的后缀和<=0,又同时满足第二个区间的前缀和>=0,所以它同样是合法括号序列
  5. 那么存在相交,相当于在割裂出一段,变为[l1,l2],[l2,r1],[r1,r2]都要求是合法序列
  6. 所以最后答案就是所有割裂出的合法序列乘积
  7. 一个区间被操作多次最后属于哪个区间,我们可以使用异或的思想,显然,如果几个数异或值相同,他们属于一个区间。
  8. 为了避免异或出现冲突,我们可以在unsigned long long 的范围内取随机数取异或。操作进行差分即可。
#include <bits/stdc++.h>
using namespace std;
#define ll               long long
#define endl             "\n"
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define eps 1e-9
#define int              long long
typedef unsigned long long ull;
typedef pair<int, int> pii;
inline int read(int &x);
//double 型memset最大127,最小128
//---------------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------------//
const int N = 3e5 + 10;
const int mod = 998244353;

ll f[N];

ll fastmi(ll base,ll power)
{
	ll ans=1;
	while(power)
		{
			if(power&1)ans=ans*base%mod;
			power>>=1,base=base*base%mod;
		}
	return ans;
}
void mysolve()
{
	mt19937_64 rnd(random_device{}());
	uniform_int_distribution<ull> dist(0, ULLONG_MAX);
	int n,k;
	cin>>n>>k;
	vector<int>b(n+5);
	int l,r;
	for(int i=1; i<=k; ++i)
		{
			cin>>l>>r;
			ull h=dist(rnd);
			b[l]^=h,b[r+1]^=h;
		}
	if(n&1)
		{
			cout<<0<<endl;
			return;
		}
	map<ull,int>mp;
	for(int i=1; i<=n; ++i)
		{
			b[i]^=b[i-1];
			mp[b[i]]++;
		}
	int ans=1;
	for(auto [k,v]:mp)
		{
			if(v&1)//要求被割裂的每个段都是偶数长度
				{
					cout<<0<<endl;
					return;
				}
			ans=ans*f[v/2]%mod;
		}
	cout<<ans<<endl;
}

int32_t main()
{
	std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);//使用read请把解绑注释了
	int t=1;
	cin >> t;
	//read(t);
	f[0]=1;
	for(int i=1; i<=3e5; ++i)
		f[i]=f[i-1]*(4*i-2)%mod*fastmi(i+1,mod-2)%mod;//预处理卡特兰数
	while (t--)
		{
			mysolve();
		}
	system("pause");
	return 0;
}

inline int read(int &x)
{
	x = 0;
	char ch = 0;
	while (ch < '0' || ch > '9')ch = getchar();
	while (ch >= '0' && ch <= '9')
		{
			x = x * 10 + ch - '0';
			ch = getchar();
		}
	return x;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/602949.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenCV笔记整理【人脸检测之Harr级联分类器dlib库】

1. 级联分类器&#xff1a; OpenCV提供的级联分类器有Harr、HOG、LBP这3种&#xff0c;这些分类器以XML文件保存&#xff0c;这里主要演示Harr检测人脸&#xff08;OpenCV提供的分类器不仅限于检测人脸&#xff0c;还包括下表特征检测&#xff0c;当然OpenCV还支持训练自己的级…

Vim学习笔记【Ch02】

Vim学习笔记 系列笔记链接Ch02 Buffers, Windows, TabsBuffers什么是buffer查看所有bufferbuffer之间的切换删除buffer退出所有窗口 Windows窗口的创建窗口切换快捷键其他快捷键 Tabs什么是tabtab相关命令 window和buffer结合的3D移动小结 系列笔记链接 Ch00&#xff0c;Ch01 …

python介绍——入门

前言 Python 是一种面向对象的解释型计算机程序设计语言&#xff0c;它继承了传统编译语言的强大性和通用性&#xff0c;同时也借鉴了脚本语言和解释语言的易用性。今天我就来给大家简单介绍一下python&#xff1a; 一、python的起源 1989年的圣诞节期间&#xff0c;吉多▪范…

Redis底层学习(二)—存储类型-String篇

这里写目录标题 应用场景底层结构知识普及 应用场景 服务器命令&#xff1a; 1.单值缓存 存储key,value &#xff1a;SET key value2.对象缓存 存储key,value :SET key value&#xff08;json 格式数据&#xff09; 3.分布式锁 底层结构 我们可以通过命令查看 value…

C++ 学习 ::【基础篇:14】:C++ 类的基本成员函数:析构函数的作用 及 自定义析构函数情形

本系列 C 相关文章 仅为笔者学习笔记记录&#xff0c;用自己的理解记录学习&#xff01;C 学习系列将分为三个阶段&#xff1a;基础篇、STL 篇、高阶数据结构与算法篇&#xff0c;相关重点内容如下&#xff1a; 基础篇&#xff1a;类与对象&#xff08;涉及C的三大特性等&#…

scratch找食物 中国电子学会图形化编程 少儿编程 scratch编程等级考试一级真题和答案解析2023年5月

目录 scratch找食物 一、题目要求 1、准备工作 2、功能实现 二、案例分析

全志V3S嵌入式驱动开发(多按键输入驱动)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们说过&#xff0c;荔枝派的开发板上面&#xff0c;有4个按键本身不是通过gpio连接到soc上面的。它是通过ad的方法&#xff0c;连接到主芯片…

SpringCloud GateWay-Filter学习

3 Filter/过滤器 文章目录 3 Filter/过滤器1 GatewayFilter 使用 -- 路由过滤器2 GatewayFilter 使用 -- 自定义过滤器 路由过滤器可用于修改进入的HTTP请求和返回的HTTP响应Spring Cloud Gateway 内置了多种路由过滤器&#xff0c;他们都由GatewayFilter的工厂类来产生 1 Gat…

华为OD机试真题B卷 Java 实现【IPv4地址转换成整数】,附详细解题思路

一、题目描述 存在一种虚拟 IPv4 地址&#xff0c;由4小节组成&#xff0c;每节的范围为0~255&#xff0c;以#号间隔&#xff0c; 虚拟 IPv4 地址可以转换为一个32位的整数&#xff0c;例如&#xff1a; 128#0#255#255&#xff0c;转换为32位整数的结果为2147549183&#xff0…

以技术实践赋能开源安全|2023开放原子全球开源峰会开源安全技术与实践分论坛即将启幕

作为数字化转型时代的重要技术和协作模式&#xff0c;开源软件在各行各业得到广泛应用&#xff0c;由此也引发了诸多与安全相关的问题。6月12日&#xff0c;2023开放原子全球开源峰会“开源安全技术与实践”分论坛将在北京经开区北人亦创国际会展中心举行。 本次分论坛由开放原…

为什么说 Go 语言字符串是不可变的?

原文链接&#xff1a; 为什么说 Go 语言字符串是不可变的&#xff1f; 最近有读者留言说&#xff0c;平时在写代码的过程中&#xff0c;是会对字符串进行修改的&#xff0c;但网上都说 Go 语言字符串是不可变的&#xff0c;这是为什么呢&#xff1f; 这个问题本身并不困难&am…

SAP-QM-物料主数据-质量管理视图字段解析

过账到质检库存&#xff1a;要勾选&#xff0c;否则收货后库存不进入质检库存HU检验&#xff1a;收货到启用HU管理的库位时产生检验批&#xff0c;例如某个成品物料是收货到C002库位&#xff0c;该库位启用了HU管理&#xff0c;那么此处要勾选。但是如果勾选了&#xff0c;却收…

30天学会vue.js?|vue.js 3 移动应用开发实战 阅读笔记

最近又在折腾vuejs, 计划用30天的时间来掌握这个前端语言。 大概用了一周时间看完这本书。 这本书需要有编程基础的同学阅读。如果从零开始学前端的话&#xff0c;个人不建议&#xff0c;书本内容跳跃性很大&#xff0c;甚至个人觉得有点凌乱。PS&#xff1a;阅读此书一定要配…

黑马Redis视频教程实战篇(五)

目录 一、达人探店 1.1、发布探店笔记 1.2、查看探店笔记 1.3、点赞功能 1.4、点赞排行榜 二、好友关注 2.1、关注和取消关注 2.2、共同关注 2.3、Feed流实现方案 2.4、推送到粉丝收件箱 2.4、实现分页查询收邮箱 一、达人探店 1.1、发布探店笔记 发布探店笔记 探…

自定义组件和样式学习

一、使用组件3步 例如&#xff1a;APP.vue中使用另外两个组件Left.vue,Right.vue &#xff08;3个页面&#xff09; 1.在APP.vue中用import *** from **** 导入Left.vue、Right.vue页面 2.在APP.vue的js中和data同级注册&#xff0c;components{Left,Rirght} 3.注册完后可在APP…

JAVA内存深度分析报告

文章目录 理论部分&#xff1a;1.Heap Memory&#xff08;堆内存&#xff09;2.Non-heap Memory&#xff08;堆外内存&#xff09;3.Direct Memory&#xff08;直接内存&#xff09; 实验部分&#xff1a;1.Platform MXBeans API 监控快照2.MetaSpace 快照:3.Native Memory 快照…

线程池的实现原理

线程池的实现原理 所谓线程池&#xff0c;通俗的理解就是有一个池子&#xff0c;里面存放着已经创建好的线程&#xff0c;当有任务提交给线程池执行时&#xff0c;池子中的某个线程会主动执行该任务。如果池子中的线程数量不够应付数量众多的任务时&#xff0c;则需要自动扩充…

华为OD机试真题B卷 Java 实现【素数之积】,附详细解题思路

一、题目描述 RSA加密算法在网络安全世界中无处不在&#xff0c;它利用了极大整数因数分解的困难度&#xff0c;数据越大&#xff0c;安全系数越高。 给定一个32位正整数&#xff0c;请对其进行因数分解&#xff0c;找出是哪两个素数的乘积。 二、输入描述 一个正整数num …

科普:什么是小米刷机中的FASTBOOT

目录 1. 什么是手机上的FASTBOOT模式&#xff1f;2. 如何进入与退出FASTBOOT模式&#xff1f;2.1 进入方式2.2 退出方式 3. 如何在PC端安装FASTBOOT驱动&#xff1f;4. 怎么开启FASTBOOT命令提示符&#xff1f;5. 目前FASTBOOT命令有哪些类型&#xff1f;6. 常用的FASTBOOT命令…

第五章 堆内存

文章目录 前言一、&#x1f698; 本地方法1、什么是本地方法2、为什么使用 Native Method 二、&#x1f684; 本地方法栈三、&#x1f6a5; 堆内存1、-Xms10m -Xmx10m 设置堆内存的大小2、内存细分3、设置堆空间的大小与OOMjps 查看Java程序进程jstat -gc 进程号 查看堆内存参数…