【学习笔记】构造&随机&非传统题

1.【构造】

重在人类思考路径,而非结论,这里有一些可复用的套路

  • 分块构造

  • 折半构造CF1887E

  • 建图构造CF1270G

  • 随机构造hdu6664

  • 正负构造hdu6804

2.【随机】

K-path color coding(hdu6664)

3.【非传统题】

3.1【交互】

1.IO交互

2.函数交互

增量构造法CF1762D

3.2 【通信】

qoj——Communication

1.压缩传递信息

2.交互式通信

3.3 【提答】

模拟退火

非常好文章(赞)

T越大,可变化幅度越大;

若答案更优,直接取

若答案更劣,t越小,答案越劣,接受度越小,反之亦然

T逐渐冷却,此时不再变化

P1337

double energy(double x,double y)//根据物理学知识,能量总和越小越稳定 
{
   double r=0,dx,dy;
   for (int a=1;a<=n;a++)
   {
      dx=x-q[a].x;
      dy=y-q[a].y;
      r+=sqrt(dx*dx+dy*dy)*q[a].w;
   }
      return r;
}
void SA(){
	double t=3000;//初始温度
	double down=0.98;//降温 
	while(t>=eps){
		double dx=ansx+(rand()*2-RAND_MAX)*t;
		double dy=ansy+(rand()*2-RAND_MAX)*t;
		//cout<<dx<<" "<<dy<<"\n";
		double dw=energy(dx,dy);//随机解
		double d=dw-answ;
		//cout<<d<<"\n";
		if(d<=0){
			answ=dw;
			ansx=dx;
			ansy=dy;
		}
		else if(exp(-d/t)*RAND_MAX>rand()){
			ansx=dx;
			ansy=dy; 
		}
		t*=down;
	} 
} 
void solve(){
	int ttt=30;
	while(ttt--) SA();//模拟退火 
}
posted @ 2026-08-21 17:40  Aistyr  阅读(4)  评论(0)    收藏  举报