JLOI2015 切题记 - HZH's Blog - 自闭症
JLOI2015 切题记
T1 原题吧。。考虑下面条件限制的作用。。可以推出一个递推式,然后矩阵乘法算一下。。注意一下b^2=D的情况。。因为这个狂WA多发。。
T2 写了个倍增,爆了很久没有A结果发现倍增的数组开小了1,然后改掉就A了蛤蛤,代码量是第二段的一半不到蛤蛤。。
#include<cstdio> #include<algorithm> #define N 300010 #define M 19 using namespace std; int n,m,dad[M][N],x,y,gs[N],an[N],i,t,cs; double a[N],h[M][N],b[N],s; int main() { scanf("%d%d",&n,&m);a[1]=1; for(i=1;i<=n;i++)scanf("%lf",&h[0][i]); for(i=2;i<=n;i++) { scanf("%d%d%lf",&x,&y,&a[i]); if(!y)b[i]=a[i],a[i]=1; a[i]*=a[x];b[i]=b[i]*a[x]+b[x]; h[0][i]=h[0][i]*a[i]+b[i];dad[0][i]=x; for(t=0;dad[t][dad[t][i]];t++) { dad[t+1][i]=dad[t][dad[t][i]]; h[t+1][i]=max(h[t][i],h[t][dad[t][i]]); }if(t>cs)cs=t; }for(i=1;i<=m;i++) { scanf("%lf%d",&s,&x);s=a[x]*s+b[x]; for(t=cs;t>=0;t--) if(s>=h[t][x]-0.5&&dad[t][x])x=dad[t][x],an[i]+=1<<t; if(s>=h[0][x]-0.5)x=dad[0][x],an[i]++;gs[x]++; }for(i=1;i<=n;i++)printf("%d\n",gs[i]); for(i=1;i<=m;i++)printf("%d\n",an[i]); }
T3 傻逼题。。还调了一下eps。。发现1e-4可A。。真扯淡。。
T4 考虑问题转化,变成第i项>=第i-1项+1,然后转化成一张图问有几种走法,然后就变成一堆组合数求和。。然后就没有了。。跑得蛮快。。大概也有第二吧。。第一是个趁数据还没出交的python哥。。
T5 未完成
T6 用了很傻比的做法。。2^3(n-1)。。。然后跑了rank倒一,我很自豪蛤蛤。。
2015年5月10日 00:28
orz虐各国国家队的胡主力
2015年5月18日 22:35
你好,能给我发一下你的第二题的倍增的代码吗?谢谢!邮箱:byte9777@gmail.com