F. Ira and Flamenco

embedded/2025/1/31 17:38:27/

题目链接:Problem - F - Codeforces

题目大意:给n,m n个数让从中选m个数满足一下条件:

1.m个数互不相同

2.里面的任意两个数相减的绝对值不能超过m

求这n个数有多少组数据满足。

第一行包含一个整数 t ( 1 ≤ t ≤ 1e4 ) - 测试用例数。

每个测试用例的第一行包含整数 n 和 m ( 1≤ m ≤ n ≤ 2⋅1e5 ) 

每个测试用例的第二行包含 n 个整数 a1,a2,…,an ( 1≤ ai ≤ 1e9 ) 。

保证所有测试用例的 n 之和不超过 2⋅1e5。

用到的知识:滑动窗口乘法原理,  乘法逆元

解题思路:首先通过选择m个数, 要不同,两两组合不能相减绝对值不可以超过m, 即里面的最大值与最小值之差不可以超过m, 所以可以采用滑动窗口实现, 窗口大小m.

组合数学的运用, 当有重复的数出现, 那么就会用到乘法原理, 列如 m==2,对于数列 1 2 2 3 4 对于 数列1 2 时, 2可以有两种选择, 所以再该窗口时, 应要乘以二。 

 而对于当窗口滑动时,滑出窗口的数的个数要被除下来, 由于题目要求ans要取模1e9+7, 所以用到乘法逆元,即可以实现整个窗口的滑动。MOD = 1e9+7, 可以使用费马小定理求出逆元。

为了选择去重与排序,采用map收集。

#include<bits/stdc++.h>
using namespace std;using i64 = long long;
using i128 = __int128;const int MOD = 1e9+7;
i64 ksm(i64 a, i64 b){i64 res = 1;while(b) {if(b&1) {res = res * a % MOD;}b>>=1;a  = a * a % MOD;}return res;
}
void solve(){int n, m;cin >> n >> m;vector<int> a(1);i64 ans = 0;map<int,i64> mp;for(int i=0; i<n; i++) {int t;cin >> t;mp[t] ++;}for(auto& [x,y] : mp) {a.push_back(x);//去重}sort(a.begin(), a.end());int i=1, j=1;int sz = a.size();i64 cnt = 1;while(i<sz) {while(j<sz && a[j] < a[i]+m) {//滑动窗口cnt = (cnt * mp[a[j]]) % MOD;j++;}if(j-i==m) { //更新ansans = (ans+cnt + MOD) %MOD;}//滑出窗口,乘以a[i]数的逆元即可以除以该数cnt  = (cnt*ksm(mp[a[i]], MOD-2) + MOD) % MOD;//费马小定理求逆元i++;}cout << ans << "\n";
}int main(){ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);int t;cin >> t;while(t--) {solve();}
}

  感谢各位的收看与点赞, 欢迎大佬指正。 


http://www.ppmy.cn/embedded/158416.html

相关文章

跟李沐学AI:视频生成类论文精读(Movie Gen、HunyuanVideo)

Movie Gen&#xff1a;A Cast of Media Foundation Models 简介 Movie Gen是Meta公司提出的一系列内容生成模型&#xff0c;包含了 3.2.1 预训练数据 Movie Gen采用大约 100M 的视频-文本对和 1B 的图片-文本对进行预训练。 图片-文本对的预训练流程与Meta提出的 Emu: Enh…

青少年编程与数学 02-008 Pyhon语言编程基础 05课题、数据类型

青少年编程与数学 02-008 Pyhon语言编程基础 05课题、数据类型 一、数据类型1. 数字类型&#xff08;Numeric Types&#xff09;2. 序列类型&#xff08;Sequence Types&#xff09;3. 集合类型&#xff08;Set Types&#xff09;4. 映射类型&#xff08;Mapping Type&#xff…

【redis进阶】redis 总结

目录 介绍一下什么是 Redis&#xff0c;有什么特点 Redis 支持哪些数据类型 Redis 数据类型底层的数据结构/编码方式是什么 ZSet 为什么使用跳表&#xff0c;而不是使用红黑树来实现 Redis 的常见应用场景有哪些 怎样测试 Redis 服务器的连通性 如何设置 key 的过期时间 Redis …

React第二十八章(css modules)

css modules 什么是 css modules 因为 React 没有Vue的Scoped&#xff0c;但是React又是SPA(单页面应用)&#xff0c;所以需要一种方式来解决css的样式冲突问题&#xff0c;也就是把每个组件的样式做成单独的作用域&#xff0c;实现样式隔离&#xff0c;而css modules就是一种…

LeetCode题练习与总结:最长和谐子序列--594

一、题目描述 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。 给你一个整数数组 nums &#xff0c;请你在所有可能的 子序列 中找到最长的和谐子序列的长度。 数组的 子序列 是一个由数组派生出来的序列&#xff0c;它可以通过删除一些元素或不删除元素…

Linux C++

一、引言 冯诺依曼架构是现代计算机系统的基础&#xff0c;它的提出为计算机的发展奠定了理论基础。在学习 C 和 Linux 系统时&#xff0c;理解冯诺依曼架构有助于我们更好地理解程序是如何在计算机中运行的&#xff0c;包括程序的存储、执行和资源管理。这对于编写高效、可靠的…

在线课堂小程序设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

计算机毕业设计Python+CNN卷积神经网络小说推荐系统 K-means聚类推荐算法 深度学习 Kears 小说数据分析 可视化 Scrapy爬虫 协同过滤

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…