zoukankan      html  css  js  c++  java
  • 7387. 【2021.11.16NOIP提高组联考】数析送命题

    Description

    \(\text{pty}\) 在数析课上学习了函数:

    • \(f: R \rightarrow R\)
    • \(\forall x \in R, f(x)=f(-x) \Leftrightarrow f\) 是偶函数。
    • \(\forall x \in R, f(x)=-f(-x) \Leftrightarrow f\) 是奇函数。
    • \(\forall x \in R, f(x)=f(x+T) \Leftrightarrow T\)\(f\) 的周期。
    • \(X(f)=\{T>0 \mid \forall x \in R, f(x)=f(x+T)\}\),定义 \(f\) 的最小正周期为 \(\min \{X(f)\}\)

    \(\text{pty}\) 已经确定了 \(f\) 的若干条性质, 每条性质形如 \(f(x+A)\) 是偶函数或者 \(f(x+B)\) 是奇函数, 记 \(F=\{f \mid f\) 满足上述条件 \(\}\)

    \(\text{pty}\) 想知道 \(f\) 的最小正周期的最大值, 即求 \(\max _{f \in F} \min \{X(f)\}\) 。 特殊地, 如果最大值可以无穷大或者不存在最小正周期, 输出 \(-1\)

    Solution

    考虑当只有偶函数时,可以推出对于两个函数 \(f(x+a)=f(-x+a)\)\(f(x+b)=f(-x+b)\) 的周期为 \(2(b-a)\)

    只有奇函数同理。

    将偶函数和奇函数放在一起考虑,依旧可以推出对于偶函数 \(f(x+a)=f(-x+a)\)\(f(x+b)=-f(-x+b)\) 的周期是 \(4(b-a)\)

    具体过程本文不多说,想知道的可以点击这里:证明过程

    那么接下来就很简单了,偶函数的答案为 \(ans=2\times \gcd_{i,j}(a_i-a_j)\),但不可能枚举 \(i,j\),转换式子变成 \(ans=2\times \gcd_j(a_1-a_j)\)

    奇函数同理。然后把所有放在一起考虑,式子一样,只不过系数变成 4。

    最后对 3 个答案再求一次 \(\gcd\),如果答案为 0 或 1 则无解,否则有解,注意输出绝对值。

    Code

    #include<cstdio>
    #include<algorithm>
    #define N 1000005
    #define ll long long
    using namespace std;
    ll n,x,y,gcd1,gcd2,gcd3,ans,q1n,q2n,a[N],q1[N],q2[N];
    int main()
    {
    	freopen("function.in","r",stdin);
    	freopen("function.out","w",stdout);
    	scanf("%lld",&n);
    	for (int i=1;i<=n;++i)
    	{
    		scanf("%lld%lld",&x,&y);
    		if (x==0) q1[++q1n]=y;
    		else q2[++q2n]=y;
    		a[i]=y;
    	}
    	for (int i=2;i<=q1n;++i)
    		gcd1=__gcd(gcd1,q1[1]-q1[i]);
    	for (int i=2;i<=q2n;++i)
    		gcd2=__gcd(gcd2,q2[1]-q2[i]);
    	for (int i=2;i<=n;++i)
    		gcd3=__gcd(gcd3,a[1]-a[i]);
    	gcd1*=2;gcd2*=2;gcd3*=4;
    	ans=__gcd(__gcd(gcd1,gcd2),gcd3);
    	if (ans==0||ans==1||ans==-1) printf("-1\n");
    	else printf("%lld\n",abs(ans));
    	return 0;
    }
    
  • 相关阅读:
    区域赛系列一多边形划分(卡特兰数)
    Going Home(最大匹配km算法)
    奔小康赚大钱(km)
    Air Raid(最小路径覆盖)
    Save Princess(丑数)
    Asteroids(最小点覆盖)
    Windows命令行命令总结
    SPI协议详解
    Python实现串口通信(pyserial)
    python中进制转换
  • 原文地址:https://www.cnblogs.com/Livingston/p/15563909.html
Copyright © 2011-2022 走看看