首页 > 其他分享 >CF1935D Exam in MAC 题解

CF1935D Exam in MAC 题解

时间:2024-04-01 23:44:37浏览次数:28  
标签:frac 题解 sum 个数 long times MAC CF1935D leqslant

Exam in MAC

题意

\(t\) 组数据。

给定一个大小为 \(n\) 的集合 \(s\) 和一个整数 \(c\),保证 \(0 \leqslant s_i \leqslant c(1 \leqslant i \leqslant n)\)。

求有多少对整数数对 \((x,y)\),满足:

  • \(0\leqslant x \leqslant y \leqslant c\)。
  • \(x + y \notin s\) 且 \(y - x \notin s\)。

数据范围

  • \(1 \leqslant n \leqslant 3 \times 10^5, 1 \leqslant c \leqslant 10^9\)。
  • \(0 \leqslant s_i \leqslant c(1 \leqslant i \leqslant n)\)​。
  • \(s_i < s_{i + 1}(1 \leqslant i < n)\)。

思路

容斥题。

求不满足两个条件的数对个数,可以转化为总数对个数减满足其中任意一个条件(即 \(x + y \in s\) 或 \(y - x \in s\))的数对个数,再加满足两个条件的数对个数。

  1. 总数对个数:对于 \(x = 0\),\(y\) 有 \(c + 1\) 种取法;对于 \(x = 1\),\(y\) 有 \(c\) 种取法……总个数为 \(\frac{(c + 2) \times (c + 1)}{2}\)。
  2. 满足 \(x + y \in s\) 的数对个数:由于 \(s\) 中的元素互不相同,那么只要分别处理每个 \(x + y = s_i\) 的数对个数即可。注意 \(x \leqslant y\),总个数为 \(\left\lfloor \frac{s_i}{2} \right\rfloor + 1\)。
  3. 满足 \(y - x \in s\) 的数对个数:同理,也只需要分别处理每个 \(y - x = s_i\) 的数对个数即可。转换式子,\(y = x + s_i\),由于 \(0 \leqslant y \leqslant c\),所以 \(0 \leqslant x \leqslant c - s_i\),总个数为 \(c - s_i + 1\)。
  4. 满足 \(x + y \in s\) 且 \(y - x \in s\) 的数对个数:假设 \(x + y = s_i,y - x = s_j\),推一下式子,可得 \(\begin{cases}2 \times x = s_i - s_j\\ 2 \times y = s_i + s_j\end{cases}\)。由于 \(x\) 和 \(y\) 都是整数,则 \(s_i - s_j\) 和 \(s_i + s_j\) 都必须是偶数。易得当 \(s_i\) 和 \(s_j\) 奇偶性相同时存在数对 \((x,y)\)。很明显,\(y =\frac{s_i + s_j}{2} \leqslant c\)。令 \(a\) 为 \(s\) 中元素的奇数个数,\(b\) 为 \(s\) 中元素的偶数个数,总个数为 \(\frac{(a + 1) \times a}{2}+\frac{(b + 1) \times b}{2}\)​。

记得答案要开 long long

复杂度

  • 时间:\(O(n)\)。
  • 空间:\(O(1)\)。

Code

点击查看代码
#include <bits/stdc++.h>

using namespace std;

int T, n, c, sum[2]; // sum[0] 记录偶数个数,sum[1] 记录奇数个数
long long ans; // 答案开 long long

void Solve () {
  cin >> n >> c;
  ans = 1ll * (c + 2) * (c + 1) / 2; // 初始数对个数
  for (int i = 1, x; i <= n; i++) {
    cin >> x, ans -= x / 2 + 1 + c - x + 1, sum[x % 2]++; // 减去满足任意一个条件的数对个数
  }
  cout << ans + 1ll * (sum[0] + 1) * sum[0] / 2 + 1ll * (sum[1] + 1) * sum[1] / 2; // 加上满足两个条件的数对个数
  sum[0] = sum[1] = 0;
}

int main () {
  ios::sync_with_stdio(0), cin.tie(0);
  for (cin >> T; T--; Solve(), cout << '\n') {}
  return 0;
}

标签:frac,题解,sum,个数,long,times,MAC,CF1935D,leqslant
From: https://www.cnblogs.com/wnsyou-blog/p/18109392

相关文章

  • 2024最新一线互联网大厂常见高并发面试题解析
    面试官:临界区是什么?答:临界区用来表示一种公共资源或者说是共享资源,可以被多个线程使用。但是每一次,只能有一个线程使用它,一旦临界区资源被占用,其他线程要想使用这个资源,就必须等待。比如,在一个办公室里有一台打印机,打印机一次只能执行一个任务。如果小王和小明同时需要打......
  • MacBook Pro安装纯windows系统教程
    一、背景前些年头脑发热买了一台MacbookPro13,1(2016),现在是2024年,机身自带的128G已经无法满足使用需要,同时办公中跟windows系统之间的文件传输太麻烦,而且要置换的话也只能卖1000多,直接原价的2折不到,想了想还是装个windows系统接着用。二、资源准备参考网上资源,网上很多教程......
  • pytorch在Mac上实现像cuda一样的加速
    1.参考:https://developer.apple.com/metal/pytorch/2.具体实现:2.1RequirementsMacM芯片或者AMD的GPUmacOS12.3orlaterPython3.7orlaterXcodecommand-linetools: xcode-select--install2.2准备anac......
  • 【赛题解析】【移动应用开发】全国职业院校技能大赛任务一:实现社区首页功能解析
    ​培训、环境、资料、考证公众号:波比网络公众号2:波比网络工作室移动应用开发技能大赛交流群:548238632波比网络专注于技能提升,赋能**本文章全文由波比网络原创,非法转载必究!**文章目录移动应用与开发任务1:实现社区首页功能1.界面顶部显示所在社区名称、轮播图和社......
  • IDEA中新建SpringBoot模块,JDK版本问题解决
    问题描述IDEA中新建SpringBoot模块,使用的JAVAJDK1.8,新建模块时选项中没有JDK8: 运行时报错,JDK之类的问题解决方案,查看修改以下四个地方:(1)设置-Java编译器 (2)项目结构--依赖以及源码 ......
  • 哈尔滨理工大学3-31校赛模拟赛第一场题解
    概览:ABF为签到题,CE模拟,D深搜,G最短路,H双指针A.提取数字:注意前导零的情况需要排除,由于组成的数不超过longlong范围,所以直接用res承接就好了#include<iostream>usingnamespacestd;longlongres;intmain(){charc;while(cin>>c)if(c>='0'&&c<='9......
  • CCF CSP模拟真题解答示例
    CCFCSP(CertifiedSoftwareProfessional)是中国计算机学会主办的软件能力认证考试,旨在评估参赛者在计算机科学和软件工程方面的基本知识和实践能力。请注意,以下解答仅作为示例,并非针对实际真题的准确答案。实际考试中的题目和答案可能会有所不同,因此建议参考官方发布的真题......
  • 下载安装 macOS 版本的 Windows 远程桌面客户端(Microsoft Remote Desktop)
    如果有非国区的账号,直接在商店中下载即可:https://apps.apple.com/us/app/microsoft-remote-desktop/id1295203466?mt=12国区是搜不到的,微软提供了beta版本下载:https://install.appcenter.ms/orgs/rdmacios-k2vy/apps/microsoft-remote-desktop-for-mac/distribution_groups/al......
  • 洛谷 P9907 [COCI 2023/2024 #1] Mostovi 题解
    题目分析首先可以确定的是需要枚举断边,所以我们希望两次枚举之间能有些关联。不难想到类树形DP的套路,建DFS树,只不过这题除了讨论和父亲之间的边,还要考虑返租边。以下钦定以\(1\)为树根。树边先从简单的树边开始考虑。考虑不经过\(u\)和\(u\)的父亲\(v\),对答案是否产......
  • cleanmymac有必要买吗?cleanmymac免费使用
    在使用mac时,小编遇到了运行内存不足、硬盘空间不足的情况。遇到这种情况,我们可以借助经典的电脑深度清理软件——CleanMyMacX,清理不常用的软件和系统垃圾,非常好用!不过,有许多网友发现CleanMyMacX有免费和收费两个版本,那cleanmymac有必要买吗?小编今天就带大家了解下这款软件,......