首页 > 其他分享 >csp-s模拟1

csp-s模拟1

时间:2024-09-08 17:03:41浏览次数:3  
标签:const gcd int sqrt ceil -- csp 模拟

A. 喜剧的迷人之处在于

切入点在 \(a\),考虑 \(a\) 是不是完全平方数,是的话直接找最小能匹配的完全平方数即可,不是的话 \(a\) 一定可以表示成 \(kx^2\)

的形式,倒着找到最大的平方因子除去,只需要在 \(L\)~\(R\) 间找到一个最小的数也等于 \(kx^2\) 即可

点击查看代码
#include<bits/stdc++.h>
#define int long long
const int maxn=1e6+10;
const int inf=0x7f7f7f;
using namespace std;

int t,a,l,r;

signed main()
{
//	freopen("ex_comedy4.in","r",stdin);
//	freopen("T.out","w",stdout);
	
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);

	cin>>t;
	while(t--)
	{
		cin>>a>>l>>r;
		int x=sqrt(a);
		if(x*x==a)
		{
			double b=sqrt(l),c=sqrt(r);
			int d=sqrt(l);
			if(floor(c)-ceil(b)>=0.0)
			{
				cout<<((double)d==b?d*d:((int)b+1)*((int)b+1))<<'\n';
				continue;
			}
			cout<<"-1"<<'\n';
			continue; 
		}
		else
		{
			int z=a;
			for(int i=x;i>=2;i--)
			{
				if(z%(i*i)==0)
				{
					z/=(i*i);
				}
			}
			a*=z;
			double b=sqrt(ceil(1.0*l/z)),c=sqrt(r/z);
			int d=sqrt(ceil(1.0*l/z));
			if(floor(c)-ceil(b)>=0.0)
			{
				cout<<((double)d==b?d*d*z:((int)b+1)*((int)b+1)*z)<<'\n';
				continue;
			}
			cout<<"-1"<<'\n';
			continue; 
		}
	}

	return 0;
}

B. 镜中的野兽

抽象题,且数据很水,\(m=\gcd(S)+\operatorname{lcm}(S)\) 一定是 \(\gcd(S)\) 的倍数,所以考虑枚举 \(d=\gcd\),同时上下界同时约去 \(\gcd(S)\)

使 \(lcm=\frac{m-d}{d},gcd=1\),对 \(lcm\) 分解质因数,考虑状压,计算可得 \(1e9\) 内质因数最多 \(9\) 个,且这 \(n\) 个数最后一定存在,一

些数它们的因子没有某些因数,一些数它们的因子有某些因数的最高次方,所以一共 \(2*\) 因数个数个条件,状压每个条件是否满

足,同时枚举这 \(n\) 个数的满足条件状态,要倒叙状压,避免一个数被算多次。

点击查看代码
#include<bits/stdc++.h>
const int maxn=1e5+10;
const int inf=0x7f7f7f;
using namespace std;
int n,m,mod,phi[maxn],cnt,a[maxn],num,ans;
int f[262144][30];

void pre(int x)
{
	int s=sqrt(x),tem=x;
	for(int i=2;i<=s&&i<=tem;i++)
	{
		if(tem%i==0)
		{
			phi[++cnt]=i;
			a[cnt]=0;
			while(tem%i==0)tem/=i,a[cnt]++;
		}
	}
	if(tem!=1) phi[++cnt]=tem ,a[cnt]=1;
}

void dp(int s)
{
	for(int i=(1<<cnt*2)-1;i>=0;i--)
	{
		for(int j=n-1;j>=0;j--)
		{	
			f[i|s][j+1]=(f[i|s][j+1]+f[i][j])%mod;
		}
	}
}

void lsx(int st,int s)
{
	if(st==cnt+1)
	{
		dp(s);
		return ;
	}
	for(int i=0;i<=a[st];i++)
	{
		if(i==0)lsx(st+1,s|1<<(st-1));
		else if(i==a[st])lsx(st+1,s|1<<(st-1+cnt));
		else lsx(st+1,s);
	}
}

void solve(int x)
{
	int temp=(m-x)/x;
	if(m-x<=x)return ;
	cnt=0;
	memset(f,0,sizeof f);
	f[0][0]=1;
	pre(temp);
	lsx(1,0);
	ans=(ans+f[(1<<(cnt*2))-1][n])%mod;
}

int main()
{
//	freopen("T.in","r",stdin);
//	freopen("T.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>n>>m>>mod;
	for(int i=1;i<=sqrt(m);i++)
	{
		if(m%i==0)
		{
			solve(i);
			if(i*i!=m)solve(m/i);
		}
	}
	cout<<ans;

	return 0;
}
/*

*/

标签:const,gcd,int,sqrt,ceil,--,csp,模拟
From: https://www.cnblogs.com/oceansofstars/p/18403132

相关文章

  • ZR 2024 NOIP 十连 & CSP 七连
    NOIPday1T1简单建图跑bfs,vector会被卡空间,用前向星才能过。T2注意到原串是否确定不重要,因为无非是把每种可能的转移都多做一遍。把所有可能出现的回文串的一半插进AC自动机中,就可以转移了。CSPday1T3设\(nxt_i\)表示下一个与\(a_i\)值相同的位置到\(i\)的距......
  • C++STL之stack和queue容器适配器:基本使用及模拟实现
    目录stack的介绍和使用stack的介绍stack的使用queue的介绍和使用queue的介绍queue的使用priority_queue的介绍和使用priority_queue的介绍priority_queue的使用deque双端队列(容器)deque的介绍及使用deque的缺点deque的原理(了解)容器适配器概念stack和queue的......
  • NOIP2024模拟赛5 总结
    NOIP2024模拟赛5总结T1天才俱乐部特判了\(sum-s<0\),但没有考虑\(sum-s=0\)。挂为0pts。T2实战教学由于写的不够优,贪心+二分的思路TLE了。由于不明原因,输出\(\max(a_i+b_i)\)能过。非常神奇。T3穿越银匙之门T4绳网委托一句话总结:挂分挂成sb了。......
  • 【题解】CPS-S模拟2
    目录PreT1.不相邻集合题目描述部分分40pts10pts正解思路代码T2.线段树题目描述部分分20pts正解思路代码T3.部分分40pts正解思路代码T4.部分分10pts正解思路代码AndPre赛时没有第一时间找到签到题,遂四处游走,后来决定先打T1,约1h时切了,然后1h打后3题暴力,后面推了推T4一个特殊性质,......
  • 【C++】vector的模拟实现
    文章目录一、前言二、构造函数模拟实现构造函数调用不明确1.问题描述2、解决调用不明确的方法三、基础接口1.empty和clear2.size和capacity3.[]和iterator四、resize和reservereserve中的深浅拷贝问题1、reserve中浅拷贝发生原因2、浅拷贝发生的图解3、解决方法五、尾......
  • 【洛谷 P1996】约瑟夫问题 题解(队列+模拟+循环)
    约瑟夫问题题目描述个人围成一圈,从第一个人开始报数,数到的人出列,再由下一个人重新从开始报数,数到的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。注意:本题和《深入浅出-基础篇》上例题的表述稍有不同。书上表述是给出淘汰名小朋友,而该题是全部出圈。输入......
  • 大连市第二十四中学模拟飞行社团章程(草案)
    亲爱的飞行员:你好!欢迎来到大连市第二十四中学模拟飞行社团!我们致力于为每一位喜爱蓝天的同志提供不一样的模拟飞行体验。同时,为了是您更好的了解本社团并在加入后有更好的体验,我们特在此制作本社团章程,旨在维护社团有序、和谐的运行。一.社团简介本社团全名大连市第二十四中学......
  • CSP2024-16
    A题意:交互题。\(n\)个人,每人有一个颜色。你每次可以询问一个集合中不同颜色数量。最后输出每个人的颜色,只需保证相同的相同,不同的不同。\(n\le150\),交互次数不超过\(3500\)。考虑在区间\([l,r]\)找到与\(x\)颜色相同的编号最小的元素。怎么判断\(x\)有没有在一个集......
  • sping boot 基于 RESTful 风格,模拟增删改查操作
    RESTful-> 增:post 删:delete 改: put查: getRESTful资源路径,一般以s复数结尾 以下是代码示例:packagecom.example.springboot.controller;importorg.springframework.web.bind.annotation.*;@RestControllerpublicclassHello{@RequestMappi......
  • Mininet MAC地址学习:通过Mininet模拟二层交换机和两个主机,通过两个主机通信来了解交换
    一.MAC地址学习1.登录我们创建mininet的虚拟机,创建一个线型拓扑,控制器设置为无。2.查看全部节点,查看链路信息,然后查看节点信息3.再打开一个终端(Terminal窗口2),然后打开交换机s1和交换机s2的二层(因为交换机s1和交换机s2是两个SDN交换机,在启动Mininet时没有指定任何控制器,交......