首页 > 其他分享 >NOIP2024模拟赛7:纯粹当下

NOIP2024模拟赛7:纯粹当下

时间:2024-05-17 21:07:50浏览次数:28  
标签:p1 int sum rd NOIP2024 纯粹 buf mx 模拟

NOIP2024模拟赛7:纯粹当下

今日挂分:95pts......

T2

  • \(T\) 组数据, 每组给定 \(n,k,f,a_i\), 一个序列 \(b\) 满足 \(b_i \in [a_i-k,a_i]\), 记 \(g\) 表示至多删去序列中 \(f\) 个数后, 使得剩余所有数的 \(\gcd\), 求 \(g\) 的集合并输出.
  • 标签:转化,调和级数,前缀和.
  • 其实也有点儿 逆向思维 的感觉...
  • 直接枚举 \(g\), 考虑 b 的集合就是 \({b \ | \ b=c\times}g,c \in \N^+\)
  • 那么就反过来检测有多少个不合法的 \(a_i\)
  • 反过来, \(a_i\) 的 范围就变成了 \([c\times g,c\times g+k],c \in \N^+\)
  • 此范围以外的 \(a_i\) 都是不合法的,要求其个数不超过 \(f\).
  • 关于个数的统计,开个桶做个前缀和即可.
  • 时间复杂度: \(O(n\ln_n)\)
  • 总结一下: 其思维的逆向在于:本来 \(b_i\) 的取值是不定的,但由于 \(gcd\) 的条件因此反而需要 \(a_i\) 的取值来 "配合" \(b_i\) 的取值.
#include<bits/stdc++.h>
#define F(i,l,r) for(int i(l);i<=r;++i)
#define G(i,r,l) for(int i(r);i>=l;--i)
using namespace std;
using ll = long long;
char buf[100],*p1=buf,*p2=buf,obuf[10000000],*o=obuf;
inline int gc(){return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,100,stdin),p1==p2)?EOF:*p1++;}
inline int rd(){
	int x=0; char ch;
	while(!isdigit(ch=gc()));
	do x=(x<<3)+(x<<1)+(ch^48); while(isdigit(ch=gc()));
	return x;
}
inline void write(int x){
	if(x>9) write(x/10);
	*o++=(x%10+48);
} 
const int N=2e6+5;
int n,k,f,T,mx=0,cnt=0;
int sum[N];
signed main(){
//	freopen("tsuki.in","r",stdin);
//	freopen("tsuki.out","w",stdout);
	T=rd(); while(T--){
		n=rd(),k=rd(),f=rd();
		mx=0;
		memset(sum,0,sizeof(sum));
		F(i,1,n){
			int x=rd();
			sum[x]++;
			mx=max(mx,x);
		}
		F(i,1,mx) sum[i]+=sum[i-1];
		write(1); *o++=' ';
		F(g,2,mx){
			cnt=sum[g-1];
			for(int i=g;i<=mx && i+k<mx;i+=g){
				int l=i+k+1,r=min(mx,i+g-1);
				if(l<=r) cnt+=sum[r]-sum[l-1];
			}
			if(cnt<=f) write(g),*o++=' ';
		}
		*o++='\n';
	}
	fwrite(obuf,o-obuf,1,stdout);
	return fclose(stdin),fclose(stdout),fflush(0),0;
}

标签:p1,int,sum,rd,NOIP2024,纯粹,buf,mx,模拟
From: https://www.cnblogs.com/superl61/p/18198716

相关文章

  • 模拟退火
    模拟退火一个基于随机的算法,多用于求解最优解问题。对于一个多峰函数,该算法会在函数上不断跳跃并记录最优。#include<bits/stdc++.h>#definedoudoubleconstdoulim=1e-15,D=0.9996;usingnamespacestd;douansx,ansy,ansd;douclac(doux,douy){}voidS......
  • 【Modbus】转发:Modbus通讯模拟仿真环境的搭建
    文章目录一、概要二、所需工具介绍三、搭建虚拟仿真环境1.ModbusRTU虚拟仿真环境搭建1.1.虚拟串口工具(VSPD)使用1.2.虚拟从站工具(ModSim32)使用1.3.虚拟主站工具(Modscan32)使用1.4.更改虚拟从站工具(ModSim32)的Modbus寄存器的值1.5.更改虚拟主站工具(Modscan32)的Modbus寄存器的值2.Mo......
  • 关于华为eNSP模拟器的端口占用问题
    一、关闭虚拟化:按下WIN+R输入cmd,按ctrl+shift+enter以管理员身份运行命令提示符输入以下代码:bcdedit/sethypervisorlaunchtypeoff回车执行二、关闭Hyper-V和虚拟机平台:打开控制面板->程序->启用或关闭windows功能把Hyper-V和虚拟机平台关闭重启电脑......
  • Python模拟数据生成库Faker
    Python模拟数据生成库FakerPYPI官网https://pypi.org/project/Faker/Github官网https://github.com/joke2k/faker文档https://faker.readthedocs.io/en/master/中文参考:Python-faker的简单使用https://www.cnblogs.com/TSmagic/p/16072399.htmlpython中第三方库Fake......
  • 51模拟IIC-页读写操作
    51代码页读写IIC--模拟IIC#include<reg52.h>#include<intrins.h>sbitSDA=P0^0;sbitSCL=P0^1;sbitLED=P2^0;unsignedcharcodetable[]={0x1c,0X3B,0X2C,0X2D,0X5A,0X5C,0XC5,0X5b};voiddelayms(unsignedintt){unsignedinti,j;fo......
  • 模拟浏览器登录页面中记录账号弹出选择框
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>PopupDivExample</title><s......
  • 初识上位机(上):搭建PLC模拟仿真环境
    大家好,我是Edison。作为一个工业自动化领域的程序员,不懂点PLC和上位机,貌似有点说不过去。这里我用两篇小文带你快速进入上位机开发领域。后续,我会考虑再出一个系列文章一起玩工控上位机。什么是上位机上位机,通常是指在数据采集与控制系统中位于较高层级、具有较强数据处理能力......
  • linux下使用c++模拟下载进度
    #include<iostream>#include<iomanip>#include<chrono>#include<thread>voidshowProgressBar(doubleprogress){constintbarWidth=70;std::cout<<"\r[";intpos=static_cast<int>(barWid......
  • MindSponge分子动力学模拟——自定义控制器(2024.05)
    技术背景分子动力学模拟中的控制器(Controller)可以被用于修改模拟过程中的原子坐标和原子速度等参量,从而达到控制系统特定参量的目的。例如控温器可以用于实现NVT系综,控压器可用于实现NPT系综。而在MindSponge分子动力学模拟框架下,控温控压都可以基于控制器Controller来实现。关于......
  • mockjs: 前端模拟后端
    mockjs参考:https://blog.csdn.net/Mme061300/article/details/1303432701.入门:vue引入mockjsvue3引入mockjsnpminstallmockjs--save-dev在项目中创建一个mock数据文件,例如mockjs/data.js`://mock/data.jsimportMockfrom'mockjs'constUser=Mock.mock({......