JLOI2015 切题记 - HZH's Blog - 自闭症

JLOI2015 切题记

nbdhhzh posted @ 2015年4月20日 23:14 in 屯题 with tags JLOI , 657 阅读

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倒一,我很自豪蛤蛤。。

Avatar_small
黄致焕 说:
2015年5月10日 00:28

orz虐各国国家队的胡主力

Avatar_small
byte97 说:
2015年5月18日 22:35

你好,能给我发一下你的第二题的倍增的代码吗?谢谢!邮箱:byte9777@gmail.com


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter
Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee