爆零啊,,,,我也很绝望啊。
原因有两个。。。。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 还没想好
浙公网安备 33010602011771号