Nov.1st总结

Posted on 2017-11-01 16:56  Murs  阅读(270)  评论(0)    收藏  举报

爆零啊,,,,我也很绝望啊。

原因有两个。。。。T1没有删打表(我记得删了啊,万恶的mingw)

T2。。。。文件名。。。

我真啊

改一下,嗯。。。110

先说T1,很EZ

容斥原理

#include<cstdio>
#include<cstring>
#include<algorithm>
#define F(i,s,e) for(int i=s;i<=e;i++)
#define D(i,e,s) for(int i=e;i>=s;i--)
using namespace std;
int n,m,a[24];
long long ans=0;//temp,
int gcd(int x,int y) 
{
   if(y==0)return x;
    else 
        return gcd(y,x%y);
}

int lcm(int x,int y)
{
    return ((x*y)/gcd(x,y));
}

void Exclude(int val,int got,long long Lcm)
{
    if(Lcm>n)//是否越过n
        return;
    if(val==m+1)
    {
        if(got%2==1)//get奇数个减去
            ans-=n/Lcm;
        else
        if(got)
            ans+=n/Lcm;
        return;//判断完成直接退
    }
    Exclude(val+1,got,Lcm);
    long long temp=Lcm*a[val]/gcd(a[val],Lcm);
    Exclude(val+1,got+1,temp);
    //printf("ans%d\n",ans);
}

int main()
{
    freopen("count.in","r",stdin);
    freopen("count.out","w",stdout);
    scanf("%d%d",&n,&m);
    F(i,1,m)
    {
        scanf("%d",&a[i]);
        if(a[i]==1)
        {
            printf("0");
            return 0;
        }
    }
    Exclude(1,0,1);
    ans+=n;
    printf("%lld\n",ans);
    return 0;
}

T2

题解

二分答案t,有统计中位
数大于等于t的区间多少个。
设a[i]为前i个数中有a[i]个数>=t,若奇数区间[l,r]的中位数>=t,则(a[r]-a[l-1])*2>r-l+1,即(a[r]*2-r)>(a[l-1]*2-l+1)。设b[i]=a[i]*2-i,统计每个b[i]有多少个b[j]<b[i](j<i 且 j和i奇偶性不同)
总复杂度O(nlognlogn)

T3 还没想好