首页 > 其他分享 >Codeforces Round #845----C

Codeforces Round #845----C

时间:2023-01-25 17:22:32浏览次数:47  
标签:845 xm int Codeforces ---- -- num cnt

题目:Problem - C - Codeforces

题解:使用双指针。枚举l,寻找最小的r使条件成立。

代码:

#include<bits/stdc++.h>
using namespace std;
void solve()
{
	int n, m; 
	cin >> n >> m;
	int a[n+1];
	for(int i=1;i<=n;i++) cin >> a[i];
	sort(a+1,a+1+n);
	
	int r = 0, num = 1;
	vector<int> cnt(m+1, 0);
	
	// 更新cnt的函数, cnt_i 表示有多少元素是 i 的倍数
	auto ins = [&](int x){if(x<=1 || x>m) return;cnt[x]++; if(cnt[x] == 1) num++;};
	auto del = [&](int x){if(x<=1 || x>m) return;cnt[x]--; if(cnt[x] == 0) num--;};
	
	int ans = 1e9;
	if(m == 1)
	{
		cout << 0 << '\n';
		return;
	}
	
	for(int l=1;l<=n;l++)
	{
		while(num != m) 
		{
			// 指针移动,加入a[r+1]
			if(r == n) break;
			for(int i=1;i<=sqrt(a[r+1]);i++)
			{
				if(a[r+1] % i == 0)
				{
					ins(i);
					if(a[r+1] / i != i) ins(a[r+1] / i);
				}
			}
			r++;
		}
		
		if(num == m) ans = min(ans, a[r] - a[l]);
		
		for(int i=1;i<=sqrt(a[l]);i++)
		{
			if(a[l] % i == 0)
			{
				del(i);
				if(a[l] / i != i) del(a[l] / i);
			}
		}
	}
	if(ans == 1e9) cout << -1 << '\n';
	else cout << ans << '\n';
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        solve();
    }
    
}

  

 

标签:845,xm,int,Codeforces,----,--,num,cnt
From: https://www.cnblogs.com/hhhhy0420/p/17067080.html

相关文章

  • 基于tar通配符漏洞的提权方法
    以普通用户进入目标机后,若是可以运行tar指令,则可以通过以下的方法进行提权原理:tar有通配符*的漏洞,tar用通配符来压缩文件并读取文件名,若是看到有参数则将执行。 操......
  • 《流浪地球2》观后感——宇宙的庞大和我们的渺小
    #0前言(此文章仅发表个人观点)如果说第一部和原著有几句话的关系,那么这一部就是毫无关系,只是在原著的基础上创作,展现出中国科幻的无限潜力。真是可喜可贺可喜可贺。(话......
  • 刷刷刷 Day 21 | 501. 二叉搜索树中的众数
    501.二叉搜索树中的众数LeetCode题目要求给你一个含重复值的二叉搜索树(BST)的根节点root,找出并返回BST中的所有众数(即,出现频率最高的元素)。如果树中有不止一个众数......
  • Dos命令
    常用的Dos命令#盘符切换C: D:#查看当前目录下的所有文件 dir#切换目录 cd(changedirectoy)cd..返回上一级#清理屏幕 cls(clearscreen)#退出终端 e......
  • 文件系统简介
    inode,间接块索引表,文件控制块FCB由于硬盘是低速设备,为了避免频繁访问硬盘,等数据积攒到一定大小才一次性访问硬盘,足够大小数据就称为块。采用索引结构的文件系统,文件中的块......
  • 新手云编译Padavan完整教程
    新手云编译Padavan完整教程   一、编译固件需要的代码https://github.com/chongshengB/Padavan-buildhttps://github.com/hanwckf/rt-n56u直接fork两个代......
  • 2、python编辑器的选择安装与配置(pycharm和jupyter)
    1、pycharm首先创建一个新的项目,下边会有解释器的选择,因为已经创建了pytorch的conda环境,所以可以直接选择已存在的pytorch环境下的python文件  2、点击pythonconsol......
  • 利用Github Actions定制编译自己的Padavan固件,小白也可轻松上手,无需安装编译环境
    编译时间大概是20-30分钟左右,不同型号的固件时间不同。源码的登录IP:192.168.2.1用户名/密码:admin/adminwifi密码:1234567890交流群:1020793396教程开始:首先打开 ......
  • jQuery复习(动画效果/插件机制/jQuery文档的结构图)
    动画效果在一定的时间内,不断改变元素样式slideDown()/slideUp()/slideToggle()fadeOut()/fadeIn()/fadeToggle()show()/hide()/toggle()animate({结束时的样式},......
  • linux 中查看磁盘的总容量
     001、lsblk命令[root@PC1Desktop]#lsblkNAMEMAJ:MINRMSIZEROTYPEMOUNTPOINTsda8:00120G0disk├─sda18:1......