Codeforces Round 932 (Div. 2) D. Exam in MAC【正难则反+容斥原理】

原题链接:https://codeforces.com/problemset/problem/1935/D

题目描述:

硕士生援助中心公布了入学考试,考试内容如下。

给考生一个大小为 n 的集合 s 和一个奇怪的整数 c 。对于这个集合,需要计算出使 0≤x≤y≤c, x+y 包含在集合 s 中,并且 y−x也包含在集合 s 中的整数对(x,y)的数目。

你的朋友想进入中心工作。请帮助他通过考试!

输入

每个测试由多个测试用例组成。第一行包含一个整数 t ( 1≤t≤2⋅10^4 ) - 测试用例的个数。测试用例说明如下。

每个测试用例的第一行包含两个整数 n 和 c ( 1≤n≤3⋅10^5 , 1≤c≤10^9 )--集合的大小和奇异整数。

每个测试用例的第二行包含 n 个整数 s1,s2,…,sn ( 0≤s1<s2<…<sn≤c )--集合的元素。( 0≤s1<s2<…<sn≤c ) - 集合 s 的元素。

保证所有测试用例中 n 的总和不超过 3⋅10^5 

输出

对于每个测试用例,输出一个整数 - 合适的整数对的数目。

input
8
3 3
1 2 3
1 179
57
4 6
0 3 5 6
1 1
1
5 10
0 2 4 8 10
5 10
1 3 5 7 9
4 10
2 4 6 7
3 1000000000
228 1337 998244353
output
3
16139
10
2
33
36
35
499999998999122959

解题思路:

首先如果直接计算x+y不属于s和y-x不属于s貌似不太好计算, 这个时候就可以考虑正难则反了,ans=cnt(x,y)-cnt(x+y)-cnt(y-x)+cnt(x+y,y-x),其中ans表示答案,

cnt(x,y)表示所有的整数对(x,y)的数目,由于0<=x<=y<=c,所有总共的整数对一共有(c+1)*(c+2)/2。

cnt(x+y)表示x+y属于s的整数对的数目,那么对于0<=x<=floor(si/2)的所有x都有一个对应的y满足要求,那么就有从floor(si/2)+1个满足要求的整数对,floor表示向下取整。

cnt(y-x)表示y-x属于s的整数对的数目,那么对于si<=y<=c的所有y都有一个对应的x满足要求,那么就有(c-si+1)个满足要求的整数对。

cnt(x+y,y-x)表示x+y和x-y都属于s的所有整数对(x,y),那么不妨设x+y=si,y-x=sj,那么x=(si-sj)/2,y=(si+sj)/2,由于x和y都要求是整数,根据上述俩个式子可以得出,也就是要求si和sj的奇偶性相同即可,假设s中有odd个奇数,有even个偶数,那么这种情况满足要求的整数对数目就是(odd)*(odd+1)/2+even*(even+1)/2。

至于上述计算公式为什么最后还要加上cnt(x+y,y-x),这是因为容斥原理,我们把x+y属于s的部分减掉一遍,然后又把y-x属于s的减掉一遍,就会把x+y和y-x同时属于s的部分减掉俩遍,所有这部分还要加上一次,也就是还要加上一个cnt(x+y,y-x)。

时间复杂度:O(n),n表示输入数组的长度。

空间复杂度:不考虑输入的数组,空间复杂度O(1)。

cpp代码如下:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;
typedef long long LL;
typedef pair<int, int> PII;const int N = 3e5 + 10;
int T, n, c;
int s[N];void solve()
{cin >> n >> c;for (int i = 1; i <= n; i++)cin >> s[i];LL ans = 1ll * (c + 1) * (c + 2) / 2; // 总共的的(x,y)整数对数目int odd = 0, even = 0;                // odd记录s中的奇数个数,even记录s中的偶数个数for (int i = 1; i <= n; i++){ans -= s[i] / 2 + 1; // cnt(x+y)ans -= c - s[i] + 1; // cnt(y-x)if (s[i] % 2 == 0)even++;elseodd++;}// cnt(x+y,y-x)ans += 1ll * (even + 1) * (even) / 2;ans += 1ll * (odd + 1) * (odd) / 2;cout << ans << '\n';
}
int main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);cin >> T;while (T--){solve();}return 0;
}

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

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

相关文章

Vue+SpringBoot打造民宿预定管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用例设计2.2 功能设计2.2.1 租客角色2.2.2 房主角色2.2.3 系统管理员角色 三、系统展示四、核心代码4.1 查询民宿4.2 新增民宿4.3 新增民宿评价4.4 查询留言4.5 新增民宿订单 五、免责说明 一、摘要 1.1 项目介绍 基于…

算法——位运算(一篇搞定)

本专栏为大家分享本人学习算法遇到的不同类型的题目以及解析! 此篇文章给大家分享一些关于位运算算法的题目,在开篇还讲述了常见位运算的公式以及题目,如果对您有帮助,麻烦点个关注,如有错误,请您指出! 1.常见位运算总结(包含5道题目) 1.1基础位运算 运算符操作<<左移&…

vue 部署 abap BSP

How to Create a Vue.Js App with VS Code and Deploy... - SAP Community 详情见上面这个教程连接 Open VS Code and open a terminal window and run npm install -g vue/cli restart vscode. Open a terminal window again and go to your workspace folder to create the…

国密算法 SM9 公钥加密 数字签名 密钥交换 基于身份的密码算法(IBC)完整高效的开源python代码

上篇文章&#xff08;发布于2023-09-18&#xff09;给自己挖了个坑&#xff0c;说是要搞定SM9。从国庆前一周开始&#xff0c;到现在一个月时间&#xff0c;这个坑终于填上了。此前信息安全数学基础太差&#xff0c;理解不了SM9双线性对、扩域计算等等&#xff0c;为此还特意选…

服务器与普通电脑的区别,普通电脑是否可以作为服务器使用

服务器在我们日常应用中非常常见&#xff0c;手机APP、手机游戏、PC游戏、小程序、网站等等都需要部署在服务器上&#xff0c;为我们提供各种计算、应用服务。服务器也是计算机的一种&#xff0c;虽然内部结构相差不大&#xff0c;但是服务器的运行速度更快、负载更高、成本更高…

NCCL报错 Bootstrap : no socket interface found 解决

报错 torch.distributed.DistBackendError: NCCL error in: ../torch/csrc/distributed/c10d/ProcessGroupNCCL.cpp:1251, internal error - please report this issue to the NCCL developers, NCCL version 2.18.6 ncclInternalError: Internal check failed. Last error: B…

由浅到深认识C语言(6):变量的存储类型

该文章Github地址&#xff1a;https://github.com/AntonyCheng/c-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.csdn…

想做好国际现货黄金行情交易 请从这样的预期开始

国际现货黄金行情以多变而著称&#xff0c;而这样多变的行情&#xff0c;又由于其趋势稳定&#xff0c;而深受投资者喜爱。我们看近期&#xff0c;国际现货黄金行情不断上涨&#xff0c;短线呈现出很强的上涨趋势&#xff0c;这正是投资者入场交易的好时机&#xff0c;但是要做…

目标检测——PP-YOLOE-R算法解读

PP-YOLO系列&#xff0c;均是基于百度自研PaddlePaddle深度学习框架发布的算法&#xff0c;2020年基于YOLOv3改进发布PP-YOLO&#xff0c;2021年发布PP-YOLOv2和移动端检测算法PP-PicoDet&#xff0c;2022年发布PP-YOLOE和PP-YOLOE-R。由于均是一个系列&#xff0c;所以放一起解…

数据库中DQL、DML、DDL、DCL的概念与区别

目录 DQL (Data Query Language) DML (Data Manipulation Language) DDL (Data Definition Language) DCL (Data Control Language) 数据库语言可以根据其功能被分为几个不同的类别&#xff1a;DQL&#xff08;数据查询语言&#xff09;、DML&#xff08;数据操纵语言&…

多线程实现龟兔赛跑

pos从0到100&#xff0c;代表龟兔距离起点的长度。 兔兔一步10米&#xff0c;每次休息10s&#xff1a; public class Rabbit extends Thread {int pos0;Overridepublic void run() {while(this.pos<100){this.pos10;System.out.println("兔兔的位置&#xff1a;"…

从头手搓一台ros2复合机器人(带机械臂)

一.前言 大家好呀&#xff0c;从本小节开始我们就步入了仿真篇&#xff0c;主要对机器人仿真进行介绍与操作&#xff0c;当然仿真有优点也有缺陷&#xff0c;基于对此学习&#xff0c;我们可以对上几小节创建的小车模型模拟硬件的特性&#xff0c; 比如&#xff1a; 有多重…

洛谷[NOIP2016 提高组] 玩具谜题

[NOIP2016 提高组] 玩具谜题 题目背景 NOIP2016 提高组 D1T1 题目描述 小南有一套可爱的玩具小人&#xff0c;它们各有不同的职业。 有一天&#xff0c;这些玩具小人把小南的眼镜藏了起来。小南发现玩具小人们围成了一个圈&#xff0c;它们有的面朝圈内&#xff0c;有的面…

JetBrains学生包续期

Pycharm进入显示your license has expired 这个意思是你的许可过期了&#xff0c;重新输入最新的激活码就可以了。 1. 说明我的JetBrains学生包需要进行续期了。首先登录JetBrains官网打开个人主页&#xff0c;点击Renew my Education Pack 2. 然后填写一系列信息&#xff0c;…

面经(六)武汉超星

总体评价&#xff1a; 大意了&#xff0c;本来投完简历&#xff0c;然后对方说有没有时间聊一下&#xff0c;我以为就是聊一下技术之外的东西&#xff0c;比如待遇、离职原因之类的东西&#xff0c;没想到上来就是技术面&#xff0c;啥心理准备没有&#xff0c;一通问问给我问…

VR历史建筑漫游介绍|虚拟现实体验店|VR设备购买

VR历史建筑漫游是一种利用虚拟现实技术&#xff0c;让用户可以身临其境地参观和探索历史建筑的体验。通过VR头显和相关设备&#xff0c;用户可以在虚拟环境中自由移动和互动&#xff0c;感受历史建筑的真实氛围和文化内涵。 在VR历史建筑漫游中&#xff0c;您可以选择不同的历史…

手机备忘录怎么导出到电脑,如何将手机备忘录导出到电脑

备忘录是我们日常生活和工作中常用的工具之一&#xff0c;我们可以在手机上轻松地记录重要的事务、想法和灵感。然而&#xff0c;在某些情况下&#xff0c;我们可能需要将手机备忘录导出到电脑进行更详细的整理和管理。那么&#xff0c;手机备忘录怎么导出到电脑&#xff0c;如…

开箱即用之 windows部署jdk、设置nginx、jar自启

jdk安装 官网下载对应的安装包&#xff0c;解压之后放在本地指定的文件夹下 传送门https://www.oracle.com/java/technologies/downloads/#jdk21-windows 我比较喜欢下载zip方式的&#xff0c;解压之后直接能用&#xff0c;不需要安装了 配置环境 JAVA_HOME 添加path路径 …

Echarts折线图x轴不显示全部数据的解决办法,亲测有效

Echarts中&#xff0c;当横轴数据非常多的时候&#xff0c;这时候canvas无法渲染出全部数据的效果图来&#xff0c;可以进行以下配置&#xff0c;亲测有效。 xAxis: {type: "category",axisLabel: {interval: 0,} },type: “category” 这一行&#xff0c;不能省略&…

Solr完结版

Solr是基于Apache Lucene构建的用于搜索和分析的开源解决方案。提供可拓展索引、搜索功能、高亮显示和文字解析功能。本质是一个java web项目&#xff0c;内嵌Jetty服务器&#xff0c;安装方便。 请求Solr中的控制器&#xff0c;处理完数据后把结果相应给客户端 正向索引&#…