zoukankan      html  css  js  c++  java
  • codeforces1045B

    CF1045B

    自己瞎鸡巴yy了一下,可知若一个数X不能被表示出来,那么X所有的表示方法都在A集合中,如a1,a2,a3······an-1,an-2中若a1+ai不能被表示出来,那么如果a1到ai是回文(这里回文是指a2-a1=an-an-1,a3-a2=an-1-an-1大概懂了就可以),这样用一个数组存一下两两之间的差哈希一下就可以了

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    #define int long long
    const int N=200005,md=998244353,ha=2333;
    int n,m,a[N],b[N],de[N],has1[N],has2[N],re[N],cnt=0;
    inline bool jud(int l,int r)
    {
        return ((has1[r]-has1[l-1]*de[r-l+1]%md+md)%md==(has2[l]-has2[r+1]*de[r-l+1]%md+md)%md)?1:0;
    }
    signed main()
    {
        int i,bo; scanf("%lld%lld",&n,&m); for(i=1;i<=n;i++)scanf("%lld",&a[i]); sort(a+1,a+n+1);
        for(i=1;i<n;i++)b[i]=a[i+1]-a[i]; de[0]=1LL; for(i=1;i<=n;i++)de[i]=de[i-1]*ha%md;
        for(i=1;i<n;i++)has1[i]=(has1[i-1]*ha%md+b[i])%md; for(i=n-1;i>=1;i--)has2[i]=(has2[i+1]*ha%md+b[i])%md;
        for(i=1;i<=n;i++)
        {
            bo=1;
            if(i!=1)bo&=jud(1,i-1);
            if(i!=n)
            {
                bo&=(a[1]+a[i]+m==a[i+1]+a[n]); if(i!=n-1)bo&=jud(i+1,n-1);
            }if(bo)re[++cnt]=(a[1]+a[i])%m;
        }printf("%lld
    ",cnt); sort(re+1,re+cnt+1); for(i=1;i<=cnt;i++)printf("%lld ",re[i]);
    }

  • 相关阅读:
    有个名字叫随便乱记——css3
    CSS3伸缩布局
    路政整理
    GIst
    SVN回滚版本
    你需要知道的CSS3 动画技术
    iScroll框架的使用和修改
    CSS3阴影 box-shadow的使用和技巧总结
    Javascript异步编程的4种方法
    zepto学习零碎
  • 原文地址:https://www.cnblogs.com/gaojunonly1/p/9736554.html
Copyright © 2011-2022 走看看