再见啦,OI【NOIP2016游记】

  真·告别OI选手。

 day-1

  jz模拟赛只有200,拍到13名,而且前几天感觉状态不是很好,模拟赛一天比一天低,rp++。而我身边的ymw大佬已经开始复习LCT的板纸了,ORZORZ,而且感觉自己好颓啊,写了下历年GDOI的DP题然后就没有然后了


  day0

  学校校运会,然后看了一个上午的比赛,妈呀我们班居然拿了辣么多单项第一。。。。rp--

  下午出发去了广州二中科学城,还是上一次的paco酒店,还是熟悉的房间,熟悉的沐浴露和洗发露嘿嘿嘿。。。晚上和pipi,didi,ymw跑去吃寿司,还是我选的,结果份量特别少,rp--,只好去MC补了点汉堡辣翅啥的。然后就滚去(~﹃~)~zZ了


  day1

  早上因为昨晚吃的上火的东西肚子爆炸了,呜好痛%>_<%,然后刚开始比赛就又滚去上了一次厕所= =

  上完厕所回来看了下T2T3,woc什么鬼= =T2转化下变成维护区间中有多少个b,然后就变成链剖+主席树= =T3概率DP是闹啥样啊

  码码码然后发现T2会炸的很惨,代码量又大,弃疗T2,开始推T3的DP,写了下感觉没啥问题,然后开始码码码,距离比赛结束还有40分钟,嗯发现自己的方程是有问题的。一脸崩溃怒写60分暴力,发现式子还要重新推= =,算了24分走人= =

  下午听栋爷说线段树合并就nlogn了,claris说可以O(n)= =,然后问了下萌萌哒的NiroBC(泥揉BC),发现把dep加上或减去就变成了常数,然后就变成单点插入和单点查询,然后直接dfs就O(n)了= =

T3一看发现自己把min写成了+,于是T3又爆炸了= =

  晚上居然跑去吃了川菜= =,然后被安利下载了球球大作战,然后四个zz就开黑了嘿嘿嘿

  晚上睡觉时心想再这么下去真的就狗带了啊day2不翻盘就真的狗带了

  顺便orz今天的mogician和mengbier2333333333

  

day2

  早上起床发现忘记买水,然后一个上午都没喝水,rp--

  T1明显随便搞,T2= =woc跳蚤国王是想闹哪样啊喂T3一看n只有18明显可做很多

  然后开码了T3,大概还有1.5h的时候三个样例都过掉了,第三个用时不到 0.01s,感觉自己爆搜+最优化剪枝的东西很强势嘛,【事后刘翰之大神讲了这东西的复杂度是m^2*2^m的】,T2想了下直接上线段树了,60分滚粗

  结果一出考场发现T2就是一个合并果子的模型,那题我曾经还写过三个队列的做法的= =

不过myy居然没有yy出T2的做法嘿嘿嘿


自己的整个OI生涯感觉就都是从高一结束才开始,然后冲了一波省选,然后狗带退役.虽然自己从小学就开始学了,然而初中三年竟然跑去搞田径= =,高一天天腐败,结果高二省选day1竟然神使鬼差的只有10分,即使day2有160也无济于事了.

感觉自己在yali集训时认识了好多dalao啊,还有JZ的各位,最后ORZORZ一波吧

最后祝愿ymw【杨明伟】,wzd【王之栋】,wyx【王宇轩】,NiroBC【萌萌哒的学妹】能绽放自己的光彩吧嗯嗯嗯

还有就是感谢姜老师嗯


出成绩之前,我们高三竟然双休回家了= =,然后向广铁的dalao要到了程序【其实是因为自己老师出门了身边暂时没电脑】

luogu数据是100+25+68+70+60+95= =

day2t1忘记了组合数加起来会炸longlong,然后改了下加了个取膜就过了= =

day1t3居然拿到了神奇的部分分。

day2t3竟然被卡了常数= =

UP一下代码做个留恋吧

记得不是正确的代码哦,交了不能AC的

day1t1

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<ctime>
#define LL long long
#define DB double 
#define fo(i,a,b) for(int i=(a);i<=(b);i++)
#define fd(i,a,b) for(int i=(a);i>=(b);i--)
#define efo(i,x) for(int i=last[x];i!=0;i=e[i].next)
#define filein(x) freopen(#x".in","r",stdin)
#define fileout(x) freopen(#x".out","w",stdout)
#define file(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout)
#define ENT putchar('\n')
#define PAU putchar(' ')
using namespace std;
inline LL read() {
	LL d=0,f=1;char s=getchar();
	while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
	while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
	return d*f;
}

const int N = 1e5 + 15555;
const int M = 15;

int a[N];
char s[N][M];
int n,m;
int now=1;

int check(int k,int op,int x) {
	int ret=k,tmp=a[k]?x:-x;
	if(op==0) op--;
	tmp=-tmp*op;
	ret+=tmp;
	while(ret<=0) ret+=n;
	while(ret>n) ret-=n;
	return ret;
}

int main() {
  file(toy);
  scanf("%d%d",&n,&m);
  fo(i,1,n) scanf("%d%s",&a[i],s[i]);
  fo(i,1,m) {
  	int op,x; scanf("%d%d",&op,&x);
  	now=check(now,op,x);
//  	cerr<<s[now]<<endl;
  }
  printf("%s\n",s[now]);
  return 0;
}

day1t2 这题真的怪自己智障
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<ctime>
#define LL long long
#define DB double 
#define fo(i,a,b) for(int i=(a);i<=(b);i++)
#define fd(i,a,b) for(int i=(a);i>=(b);i--)
#define efo(i,x) for(int i=last[x];i!=0;i=e[i].next)
#define filein(x) freopen(#x".in","r",stdin)
#define fileout(x) freopen(#x".out","w",stdout)
#define file(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout)
#define ENT putchar('\n')
#define PAU putchar(' ')
using namespace std;
inline LL read() {
	LL d=0,f=1;char s=getchar();
	while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
	while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
	return d*f;
}

const int N = 300000 + 15555;

struct edge {
	int y,next;
}e[N*2];
int last[N],ne=0;
int S[N],T[N],w[N];
int dep[N],fa[N],siz[N],top[N],son[N],be[N],en[N],cnt=0;
int ans[N];
int n,m;
bool flag1=1,flag2=1;

void add(int x,int y) {
	e[++ne].y=y; e[ne].next=last[x]; last[x]=ne;
}
void add2(int x,int y) { add(x,y); add(y,x); }

void init() {
	n=read(); m=read();
	fo(i,1,n-1) {
		int x=read(),y=read();
		add2(x,y);
	}
	fo(i,1,n) w[i]=read();
	fo(i,1,m) {
		S[i]=read(),T[i]=read();
		if(S[i]!=1) flag1=0;
		if(T[i]!=1) flag2=0;
	}
}

void dfs1(int x,int pre) { int ma=0,f=0;
	fa[x]=pre; siz[x]=1; be[x]=++cnt;
	efo(i,x) if(e[i].y!=pre) {
		dep[e[i].y]=dep[x]+1;
	  dfs1(e[i].y,x);
	  siz[x]+=siz[e[i].y];
	  if(siz[e[i].y]>ma) ma=siz[e[i].y],f=e[i].y;
	}
	son[x]=f; en[x]=cnt;
}

void dfs2(int x,int Top) {
	top[x]=Top;
	if(son[x]) dfs2(son[x],Top);
	efo(i,x) if(e[i].y!=son[x]&&e[i].y!=fa[x]) {
		dfs2(e[i].y,e[i].y);
	}
}

int LCA(int x,int y) {
	while(top[x]!=top[y]) {
		if(dep[top[x]]<dep[top[y]]) swap(x,y);
		x=fa[top[x]];
	}
	return dep[x]<dep[y]?x:y;
}

int tot;

void Up(int x,int T) {
	while(x!=T) {
		if(tot==w[x]) ans[x]++;
		x=fa[x]; tot++;
	}
	if(tot==w[x]) ans[x]++;
}

void Down(int T,int x) {
	while(x!=T) {
		if(tot==w[x]) ans[x]++;
		x=fa[x]; tot--;
	}
}

void workBL() {
	dep[1]=1; dfs1(1,-1); dfs2(1,1);
//	fo(i,1,n) cerr<<top[i]<<' ';cerr<<endl;
	fo(i,1,m) {
		int x=S[i],y=T[i];
		int lca=LCA(x,y); 
//		cerr<<x<<' '<<y<<' '<<lca<<endl;
		tot=0; Up(x,lca); 
		tot=dep[x]+dep[y]-2*dep[lca]; Down(lca,y);
	}
	fo(i,1,n) printf("%d ",ans[i]);
}

int main() {
  file(running);
  init();
  workBL();
//  if(flag1) { workS(); return 0; }
//  if(flag2) { workT(); return 0; } 
//  work();
  return 0;
}

day1t3
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<ctime>
#define LL long long
#define DB double 
#define clr(a,b) memset(a,b,sizeof(a))
#define fo(i,a,b) for(int i=(a);i<=(b);i++)
#define fd(i,a,b) for(int i=(a);i>=(b);i--)
#define efo(i,x) for(int i=last[x];i!=0;i=e[i].next)
#define filein(x) freopen(#x".in","r",stdin)
#define fileout(x) freopen(#x".out","w",stdout)
#define file(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout)
#define ENT putchar('\n')
#define PAU putchar(' ')
using namespace std;
inline LL read() {
	LL d=0,f=1;char s=getchar();
	while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
	while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
	return d*f;
}

const int N = 300 + 15;
const int M = 2000 + 15;
const int inf = 2000000000;

int G[N][N];
int c[M],d[M];
DB K[M];
//DB f[M][2][M];
int n,m,V,E;
bool flag2=1;

void init() { clr(G,127/2);
	scanf("%d%d%d%d",&n,&m,&V,&E);
	fo(i,1,n) scanf("%d",&c[i]);
	fo(i,1,n) scanf("%d",&d[i]);
	fo(i,1,n) {
		scanf("%lf",&K[i]);
		if(K[i]<1) flag2=0;
	}
	fo(i,1,E) {
		int x,y,z; scanf("%d%d%d",&x,&y,&z);
		G[x][y]=G[y][x]=min(G[x][y],z);
	}
}

/*
void work() { clr(f,0);
	fo(k,1,V) fo(i,1,V) fo(j,1,V) if(k!=i&&i!=j&&k!=j) {
		G[i][j]=min(G[i][j],G[i][k]+G[k][j]);
	}
	fo(i,1,V) G[i][i]=0;
	fo(i,2,n) {
		f[i][0][0]=f[i-1][0][0]+G[c[i-1]][c[i]];
		fo(j,1,m) {
			f[i][0][j]=(DB)f[i-1][0][j]+f[i-1][1][j]+(f[i-1][0][j-1]+f[i-1][1][j-1])*(1-K[i]);
			f[i][1][j]=(DB)(f[i-1][0][j-1]+f[i-1][1][j-1])*K[i];
			f[i][0][j]+=(DB)G[c[i-1]][c[i]]*(2-K[i])+G[d[i-1]][c[i]]*(2-K[i]);
			f[i][1][j]+=(DB)G[c[i-1]][d[i]]*K[i]+G[d[i-1]][d[i]]*K[i];
			cerr<<i<<' '<<0<<' '<<j<<' '<<f[i][0][j]<<endl;
			cerr<<i<<' '<<1<<' '<<j<<' '<<f[i][1][j]<<endl;
		}
	}
	DB ans=f[n][0][0];
	fo(i,1,m) fo(j,0,1) if(f[n][j][i]<ans) ans=f[n][j][i];
//	fo(i,0,m) fo(j,0,1) cerr<<j<<' '<<i<<' '<<f[n][j][i]<<endl;
	printf("%.2f",ans);
}

void Calc() { clr(f,0);
  fo(i,1,n-1) {
  	if(!u[i]&&!u[i+1])
	}
*/

int sum; 
DB ap;
DB anss,ans;
int u[N];
	
void dfs2(int x,int y) { int tmp1=sum; DB tmp2=ap;
  if(x==n) {
  	anss+=sum*ap;
//  	cerr<<sum<<' '<<ap<<endl;
  	return ;
  }
  if(y==0) {
		sum+=G[c[x]][c[x+1]]; if(u[x+1]) ap*=(1-K[x+1]); dfs2(x+1,0); sum=tmp1; ap=tmp2;
		sum+=G[c[x]][d[x+1]]; ap*=K[x+1]; if(u[x+1])dfs2(x+1,1); sum=tmp1; ap=tmp2;
	}
	if(y==1) {
		sum+=G[d[x]][c[x+1]]; if(u[x+1]) ap*=(1-K[x+1]); dfs2(x+1,0); sum=tmp1; ap=tmp2;
		sum+=G[d[x]][d[x+1]]; ap*=K[x+1]; if(u[x+1])dfs2(x+1,1); sum=tmp1; ap=tmp2;
	}
}

void dfs(int x,int num) {
	if(num>m) return ;
	if(x>n) {
//		fo(i,1,n) cerr<<u[i]<<' '; cerr<<endl;
    anss=0; sum=0; ap=1;
		dfs2(0,0);
		if(anss<ans) ans=anss;
		return ;
	}
	u[x]=1;
	dfs(x+1,num+1);
	u[x]=0;
	dfs(x+1,num);
}

void work() { ans=inf;
	fo(k,1,V) fo(i,1,V) fo(j,1,V) if(k!=i&&i!=j&&k!=j) {
		G[i][j]=min(G[i][j],G[i][k]+G[k][j]);
	}
	fo(i,1,V) G[i][i]=G[0][i]=0;
	dfs(1,0);
	printf("%.2f",ans);
}

int g[M][2][M];

void work2() { int ans2=inf; clr(g,127/2);
	fo(k,1,V) fo(i,1,V) fo(j,1,V) if(k!=i&&i!=j&&k!=j) {
		G[i][j]=min(G[i][j],G[i][k]+G[k][j]);
	}
	fo(i,1,V) G[i][i]=G[0][i]=0;
	fo(i,0,m) g[0][0][i]=0;
	fo(i,0,n-1) fo(j,0,m) {
	  g[i+1][0][j]=min(g[i+1][0][j],g[i][0][j]+G[c[i]][c[i+1]]);
	  g[i+1][0][j]=min(g[i+1][0][j],g[i][1][j]+G[d[i]][c[i+1]]);
	  if(j<m) {
			g[i+1][1][j+1]=min(g[i+1][1][j+1],g[i][0][j]+G[c[i]][d[i+1]]);
	  	g[i+1][1][j+1]=min(g[i+1][1][j+1],g[i][1][j]+G[d[i]][d[i+1]]);
	  }
	}
	ans2=g[n][0][0];
	fo(j,0,1) fo(i,1,m) ans2=min(ans2,g[n][j][i]);
	cout<<ans2<<endl;
}

int main() {
  file(classroom);
  init();
  if(flag2==0||n*m<=30) work(); else work2();
  return 0;
}


day2t1 QAQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ

这是改了下AC了的代码

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<ctime>
#define LL long long
#define DB double
#define LB long double
#define clr(a,b) memset(a,b,sizeof(a))
#define fo(i,a,b) for(int i=(a);i<=(b);i++)
#define fd(i,a,b) for(int i=(a);i>=(b);i--)
#define efo(i,x) for(int i=last[x];i!=0;i=e[i].next) 
#define filein(x) freopen(#x".in","r",stdin)
#define file(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout)
#define remax(a,b) a=max(a,b)
#define remin(a,b) a=min(a,b)
#define ENT putchar('\n')
#define PAU putchar(' ')
#define MID ((l+r)>>1)
#define lch (k<<1)
#define rch (k<<1|1)
using namespace std;
inline LL read() {
	LL d=0,f=1;char s=getchar();
	while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
	while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
	return d*f;
}

const int N = 2000 + 155;
const int MAX = 2000;

LL f[N][N];
bool g[N][N];
int sum[N][N];
LL n,m,T,K;

void init() { clr(f,-1);
	T=read(),K=read(); 
	fo(i,1,MAX) f[i][0]=1;
	fo(i,1,MAX) fo(j,1,min(i-1,MAX)) {
		f[i][j]=max(f[i-1][j],0LL)+max(f[i-1][j-1],0LL);
		f[i][j]%=K;
//		if(f[i][j]%K) f[i][j]%=K;
	}
	fo(i,0,MAX) fo(j,0,MAX) if(f[i][j]>=0&&f[i][j]%K==0) g[i][j]=1;
}

void work() {
	fo(i,0,MAX) { sum[0][i]=0;
		fo(j,0,MAX) sum[j][i]=sum[j-1][i]+g[j][i];
	}
	/*
	fo(i,1,7) { cerr<<i<<": ";
		fo(j,0,7) cerr<<f[i][j]<<' ' ;cerr<<endl;
	} cerr<<endl;
	fo(i,1,7) {
		fo(j,0,7) cerr<<g[i][j]<<' ' ;cerr<<endl;
	} cerr<<endl;
	fo(i,1,7) {
		fo(j,0,7) cerr<<sum[i][j]<<' '; cerr<<endl;
	}
	*/
	fo(t,1,T) { LL ans=0;
		n=read(),m=read();
		fo(i,0,m) ans+=sum[n+1][i];
		printf("%d\n",ans);
	}
}

int main() {
//	file(problem);
	init();
	work();
	return 0;
}


day2t2

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#define LL long long
#define DB double
#define LB long double
#define clr(a,b) memset(a,b,sizeof(a))
#define fo(i,a,b) for(int i=(a);i<=(b);i++)
#define fd(i,a,b) for(int i=(a);i>=(b);i--)
#define efo(i,x) for(int i=last[x];i!=0;i=e[i].next) 
#define filein(x) freopen(#x".in","r",stdin)
#define file(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout)
#define remax(a,b) a=max(a,b)
#define remin(a,b) a=min(a,b)
#define ENT putchar('\n')
#define PAU putchar(' ')
#define MID ((l+r)>>1)
#define lch (k<<1)
#define rch (k<<1|1)
using namespace std;
inline LL read() {
	LL d=0,f=1;char s=getchar();
	while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
	while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
	return d*f;
}

const int N = 150000 + 15555;
const int M = 150000 + 15555;
const int NM = N + M;

LL a[NM],mx[NM<<2],b[NM<<2],lz[NM<<2],w[NM];
int n,m,q,u,v,t;

void init() { 
	n=read(),m=read(),q=read(),u=read(),v=read(),t=read();
	fo(i,1,n) a[i]=read();
	fo(i,n+1,n+m) a[i]=0;
}

void pushup(int k) {
	if(mx[lch]>mx[rch]) {
		mx[k]=mx[lch]; b[k]=b[lch];
	}else {
		mx[k]=mx[rch]; b[k]=b[rch];
	}
}

void pushlazy(int k) {
	mx[lch]+=lz[k]; mx[rch]+=lz[k];
	lz[lch]+=lz[k]; lz[rch]+=lz[k];
	lz[k]=0;
}

void buildsegtree(int k,int l,int r) {
	if(l==r) {
		mx[k]=a[l];
		b[k]=l;
		lz[k]=0;
		return ;
	}
	int mid=MID;
	buildsegtree(lch,l,mid); buildsegtree(rch,mid+1,r);
	pushup(k);
}

void Change(int k,int l,int r,int pos,LL val) {
	if(l==r) {
		mx[k]=val;
		return ;
	}
	if(lz[k]) pushlazy(k);
	int mid=MID;
	if(pos<=mid) Change(lch,l,mid,pos,val); else Change(rch,mid+1,r,pos,val);
	pushup(k);
}

LL Geta(int k,int l,int r,int pos) {
	if(l==r) return mx[k];
	if(lz[k]) pushlazy(k);
	int mid=MID;
	if(pos<=mid) return Geta(lch,l,mid,pos); else return Geta(rch,mid+1,r,pos);
}

void Add(int k,int l,int r,int ll,int rr,LL val) {
	if(rr<ll) return ;
	if(l==ll&&r==rr) {
		mx[k]+=val;
		lz[k]+=val;
		return ;
	}
	if(lz[k]) pushlazy(k);
	int mid=MID;
	if(rr<=mid) Add(lch,l,mid,ll,rr,val);
	else {
		if(ll>mid) Add(rch,mid+1,r,ll,rr,val);
		else Add(lch,l,mid,ll,mid,val),Add(rch,mid+1,r,mid+1,rr,val);
	}
	pushup(k);
}

bool cmp(LL a,LL b) { return a>b; }

void work() { int nu=0;
	buildsegtree(1,1,n+m); 
	fo(i,1,m) {
		int p=b[1]; LL valu=mx[1];
		LL l1=(DB)u/v*valu,l2=valu-l1;
		Change(1,1,n+m,p,l1); Change(1,1,n+m,++nu+n,l2);
		if(q!=0) Add(1,1,n+m,1,p-1,q),Add(1,1,n+m,p+1,nu+n-1,q);
		if(nu%t==0) printf("%lld ",valu);
	} ENT;
	fo(i,1,n+m) w[i]=Geta(1,1,n+m,i);
	sort(w+1,w+n+m+1,cmp);
	fo(i,1,n+m) if(i%t==0) printf("%lld ",w[i]);
}

int main() {
	file(earthworm);
	init();
	work();
	return 0;
}


day2t3 = =

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<ctime>
#define LL long long
#define DB double
#define LB long double
#define clr(a,b) memset(a,b,sizeof(a))
#define fo(i,a,b) for(int i=(a);i<=(b);i++)
#define fd(i,a,b) for(int i=(a);i>=(b);i--)
#define efo(i,x) for(int i=last[x];i!=0;i=e[i].next) 
#define filein(x) freopen(#x".in","r",stdin)
#define file(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout)
#define remax(a,b) a=max(a,b)
#define remin(a,b) a=min(a,b)
#define ENT putchar('\n')
#define PAU putchar(' ')
#define MID ((l+r)>>1)
#define lch (k<<1)
#define rch (k<<1|1)
using namespace std;
inline LL read() {
	LL d=0,f=1;char s=getchar();
	while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
	while(s>='0'&&s<='9'){d=d*10+s-'0';s=getchar();}
	return d*f;
}

const int N = 20;
const DB eps = 1e-6;

struct point {
	DB x,y;
}p[N];
int n,m;
int ans,anss;
int v[N];

void init() {
	scanf("%d%d",&n,&m);
	fo(i,1,n) scanf("%lf%lf",&p[i].x,&p[i].y);
}

DB Cala(int x,int y) {
	DB x1=p[x].x,y1=p[x].y;
	DB x0=p[y].x,y0=p[y].y;
	DB k=(DB)x0/x1;
	DB tmp1=k*y1-y0,tmp2=k*x1*x1-x0*x0;
	if(tmp2==0) return 1;
	DB ret=tmp1/tmp2;
	if(ret>0) return 1;
	return ret;
}

DB Calb(int x,int y) {
	DB x1=p[x].x,y1=p[x].y;
	DB x0=p[y].x,y0=p[y].y;
	DB k=(DB)(x0*x0)/(x1*x1);
	DB tmp1=y1*k-y0,tmp2=x1*k-x0;
	return tmp1/tmp2;
}

bool check(DB a,DB b,int k) {
	DB ret=(DB)a*p[k].x*p[k].x+(DB)b*p[k].x;
	if(fabs(ret-p[k].y)<=eps) return 1;
	return 0;
}

void dfs(int x) {
	if(x>n) {
		ans=anss;
		return ;
	}
	if(v[x]) dfs(x+1);
	else {
		if(anss+1>=ans) return ;
		v[x]=++anss; 
		fo(i,x+1,n) if(v[i]==0) {
			DB a=Cala(x,i),b=Calb(x,i);
			if(a>=0) continue;
			v[i]=anss;
			fo(j,i+1,n) if(i!=j&&check(a,b,j)) v[j]=anss;
			dfs(x+1);
			fo(j,i+1,n) if(v[j]==anss) v[j]=0;
			v[i]=0;
		}
		dfs(x+1);
		v[x]=0; anss--;
	}
}

void work() { clr(v,0);
	ans=n; //if(n&1) ans++;
	if(m==1) { ans=n/3+1; if(n%3) ans++; }
	anss=0; dfs(1);
	printf("%d\n",ans); //cerr<<endl;
}

int main() {
	file(angrybirds);
	int T=read();
	while(T--) {
		init();
		work();
	}
	return 0;
}


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值