F. Ira and Flamenco

ops/2025/1/31 21:43:46/

题目链接: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/ops/154586.html

相关文章

在排序数组中查找元素的第一个和最后一个位置(力扣)

一.题目介绍 二.题目解析 使用二分进行查找 2.1处理边界情况 如果数组为空&#xff0c;直接返回 [-1, -1]&#xff0c;因为无法找到目标值。 int[] ret new int[2]; ret[0] ret[1] -1; if (nums.length 0) return ret; 2.2查找左端点&#xff08;目标值开始位置&#…

低代码系统-产品架构案例介绍、轻流(九)

轻流低代码产品定位为零代码产品&#xff0c;试图通过搭建来降低企业成本&#xff0c;提升业务上线效率。 依旧是从下至上&#xff0c;从左至右的顺序 名词概述运维层底层系统运维层&#xff0c;例如上线、部署等基础服务体系内置的系统能力&#xff0c;发消息、组织和权限是必…

20个整流电路及仿真实验汇总

0、 前言 以下是关于“20个整流电路及仿真实验汇总”的前言部分: 在现代电力电子技术领域,整流电路作为将交流电(AC)转换为直流电(DC)的关键电路,广泛应用于各类电源设计、信号处理以及电力电子设备中。整流电路不仅能够为电子设备提供稳定的直流电源,还在电力传输、…

jQuery小游戏(二)

jQuery小游戏&#xff08;二&#xff09; 今天是新年的第二天&#xff0c;本人在这里祝大家&#xff0c;新年快乐&#xff0c;万事胜意&#x1f495; 紧接jQuery小游戏&#xff08;一&#xff09;的内容&#xff0c;我们开始继续往下咯&#x1f61c; 游戏中使用到的方法 key…

天融信 NGFW2.3 mibs

1. 新节点 库节点名称含义OID数据类型权限私有库tosRouteEntryrouteNetDst路由目地址1.3.6.1.4.1.14331.5.5.1.8.1.3OCTET STRINGread-only私有库tosRouteEntryrouteWeight路由权重1.3.6.1.4.1.14331.5.5.1.8.1.9Integer32read-only私有库tosRouteEntryrouteProbeID路由探测ID…

HTB:Active[RE-WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 将靶机TCP开放端口号提取并保存 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用nmap对靶机…

网络爬虫学习:应用selenium获取Edge浏览器版本号,自动下载对应版本msedgedriver,确保Edge浏览器顺利打开。

一、前言 我从24年11月份开始学习网络爬虫应用开发&#xff0c;经过2个来月的努力&#xff0c;于1月下旬完成了开发一款网络爬虫软件的学习目标。这里对本次学习及应用开发进行一下回顾总结。 前几天我已经发了一篇日志&#xff08;网络爬虫学习&#xff1a;应用selenium从搜…

deepseek关于蒸馏的通俗讲解

好的&#xff01;我用一个**做奶茶**的比喻来解释「知识蒸馏」&#xff0c;保证通俗易懂&#xff5e; --- ### **第一步&#xff1a;先理解什么是蒸馏技术** 想象你有一杯超级浓的奶茶&#xff08;**大模型**&#xff09;&#xff0c;味道复杂又醇厚&#xff0c;但太浓了喝起…