> 文章列表 > CSDN,有幸遇见 ——我的三周年创作纪念日

CSDN,有幸遇见 ——我的三周年创作纪念日

CSDN,有幸遇见 ——我的三周年创作纪念日

CSDN,有幸遇见 ——我的三周年创作纪念日

一生二,二生三,三生万物

三年,与 CSDN 的相遇相识相知——

前两年都没写,一是没纪念的概念,二是纪念日这天每年总是清明节。
还有就是不知道有勋章((

Meet 遇见

那年,我六年级,已加入了一年半的信息学竞赛。
是一次撞见,我发现了这个能指导我不会做的题目的网站。

是童心的好奇,从此让我打开了对 CSDN 的无尽探索,
一个又一个地寻找着键盘上的字母,我织出了那稚嫩懵懂的第一篇 blog ——《Go to the CSDN》。


Gain 收获

随着打字速度的加快和心智的逐渐完善,我不知不觉地习惯使用 CSDN 写 blog,虽然一共只写了 71 篇,但可以不吝啬地说,都是用心敲出来的(虽然很多内容多但点赞很少)。

只是一些小数据,但当然也有记录的必要。
CSDN,有幸遇见 ——我的三周年创作纪念日

尽管这仅有的 143 次点赞中有十多次是自己点的,但也有许许多多各行各业的强者的支持,尤其有两个是 CSDN学习 给予的,备受鼓舞。

在这里郑重感谢所有评论、点赞、收藏、关注的支持啊!

未来是一种憧憬呢。


Life 日常

还不能说创作已经是我生活的一部分了,但它一定已经成为了我生命中的一部分。
创作像是一种总结,是自己与思想的再一次碰撞。创作也是一种乐趣,尤其是收到支持时的莫大鼓舞,我的生命离不开创作。

去年第一次参加的 CSDN 竞赛,进入前十,得到了 CSDN 帆布包的馈赠,以前也在其他网站上参加过类似比赛,但像 CSDN 这样信守承诺的举办方并不多,可见“成就一亿人的社区”并非浪得虚名。“细节决定成败。” 这一点,CSDN 成功了,当之无愧。


Achievement 成就

提示:你过去写得最好的一段代码是什么? 请用代码块贴出来

倒还没感觉写过什么特别突出的代码,那就贴一份 目前唯一一道不看题解就做出来的黑题 吧。

靠模拟退火调参数调出来的,为此还在CSDN写了一篇模拟退火算法的 blog
话说写的这篇 blog 目前还是我写的文章中访问量最高的…

第一次 AC 提交时间:2022-11-18 20:48:07

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
const double T0=1e5,T1=1e-6,k=0.9;
const int L=230;
int T,m;
struct qh{double x,y;
}a[5001],c;
double sqr(double x){return x*x;}
double f(double x,double y){double res=1e9;for(int i=1;i<=m;i++) res=min(res,sqrt(sqr(x-a[i].x)+sqr(y-a[i].y)));return res;
}
double Rand(double x){return 1.0*rand()/RAND_MAX*x;}
int main(){scanf("%lf%lf%d",&c.x,&c.y,&m);for(int i=1;i<=m;i++) scanf("%lf%lf",&a[i].x,&a[i].y);double t=T0,x=0,y=0;while (t>T1){for(int i=1;i<=L;i++){double xx=-1,yy=-1;while (xx<0||xx>c.x) xx=x+(Rand(2*c.x)-c.x)*4.0*(t/T0);while (yy<0||yy>c.y) yy=y+(Rand(2*c.y)-c.y)*4.0*(t/T0);if(f(xx,yy)>f(x,y)) x=xx,y=yy;// printf("%.2f %.2f %.2f %.2f\\n",x,y,xx,yy);}t*=k;}printf("%.9f",f(x,y));return 0;
}
/*
start coding:19:55
finish debuging:20:48
*/

顺带贴一手正解代码。

#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
using std::sort;
using std::pair;
using std::min;
typedef pair<int, int> pad;/*------------------------------Computational geometry------------------------------*/const double pi =acos(-1), eps =1e-7;struct vect{double x, y;vect(){}vect(double xx, double yy):x(xx), y(yy){}vect operator + (vect v){ return vect(x+v.x, y+v.y); }vect operator - (vect v){ return vect(x-v.x, y-v.y); }vect operator * (double mu){ return vect(mu*x, mu*y); }double operator / (vect v){ return x*v.y-y*v.x; }/*叉积*/
};struct line{vect u, v;double angle;line(){}line(vect uu, vect vv):u(uu), v(vv){ angle =atan2(vv.y-uu.y, vv.x-uu.x); }
};inline short gtr(double a, double b){ return (a-b > eps); }inline bool eq(double a, double b){ return (a-b < eps && a-b > -eps); }inline bool onright(line f, vect w){ return (gtr((w-f.u)/(f.v-f.u), 0)); }/*求交点*/
vect getIntersection(line f, line g){double w =((g.u-f.u)/(f.u-f.v))/((f.u-f.v)/(g.u-g.v));return g.u+(g.u-g.v)*w;
}int cmp(line A, line B){if(eq(A.angle, B.angle)) return onright(B, A.u);/*有向直线最左的在最后面,会被保留*/else return (gtr(B.angle, A.angle));
}/*求左侧交*/
inline pad getHPI(line ls[], int totl, line hull[]){sort(ls, ls+totl, cmp);int l =0, r =0;for(int i =0; i < totl; ++i){while(i < totl-1 && eq(ls[i].angle, ls[i+1].angle)) ++i;while(r-l > 1 && onright(ls[i], getIntersection(hull[r-1], hull[r-2]))) --r;if(eq(ls[i].angle-hull[r-1].angle, pi)) return pad(0, 0);/*判方向相反的平行*/hull[r++] =ls[i];}while(r-l > 1){if(onright(hull[r-1], getIntersection(hull[l], hull[l+1]))) ++l;else if(onright(hull[l], getIntersection(hull[r-1], hull[r-2]))) --r;else break;/*已经没有更新了*/}if(r-l < 3) return pad(0, 0);else return pad(l, r);
}inline double dist(vect x, vect y){ return sqrt((y.x-x.x)*(y.x-x.x)+(y.y-x.y)*(y.y-x.y)); }/*中垂线左包含 x*/
inline line getmidline(vect x, vect y){vect mid =vect((x.x+y.x)/2, (x.y+y.y)/2), v2 =vect((y-x).y, -(y-x).x)/*顺时针方向,与 (y-x) 垂直的向量*/;line ret(mid+v2, mid);return ret;
}/*------------------------------Main------------------------------*/const int MAXN =1000100, MAXN2 =1100;inline void addbound(line ls[], int &totl, int w, int h){ls[totl++] =line(vect(w, h), vect(0, h));ls[totl++] =line(vect(0, h), vect(0, 0));ls[totl++] =line(vect(0, 0), vect(w, 0));ls[totl++] =line(vect(w, 0), vect(w, h));
}inline double getFarthest(line hull[], int toth, vect p){hull[toth++] =hull[0];double ret =0;for(int i =0; i < toth-1; ++i){double res =dist(p, getIntersection(hull[i], hull[i+1]));if(gtr(res, ret)) ret =res;}return ret;
}line ls[MAXN], hull[MAXN];inline int read(){int x =0; bool f =0; char c =getchar();while(c < '0' || c > '9') (c == '-') ? f =1, c =getchar() : c =getchar();while(c >= '0' && c <= '9') x = (x<<3) + (x<<1) + (48^c), c =getchar();return (f) ? -x : x;
}vect point[MAXN2];int main(){int w =read(), h =read(), n =read();int totp =0;for(int i =0; i < n; ++i){int x =read(), y =read();/*反正总复杂度 n 方这里就暴力判重了(*/bool f =1;for(int j =0; j < totp; ++j) if(point[j].x == x && point[j].y == y) f =0;if(f) point[totp++] =vect(x, y);}double ans =0;for(int i =0; i < totp; ++i){int totl =0;for(int j =0; j < totp; ++j){if(j == i) continue;ls[totl++] =getmidline(point[i], point[j]);}addbound(ls, totl, w, h);pad H =getHPI(ls, totl, hull);double res =getFarthest(hull+H.first, H.second-H.first, point[i]);if(gtr(res, ans)) ans =res;}printf("%.10lf", ans);
}

来源:IOI 2006 国家集训队论文「王栋 ——浅谈平面 voronoi 图的构造及应用」。


Phantasy 憧憬

还是希望能保持在 CSDN 不规律性更新吧,既然有缘相遇,何不一同随行?
不过可惜一个铁粉都还没有额…

Encourage 激励

努力学习,追求卓越。

前途是光明的,道路是艰难的。

前行不往回顾,勇进不忘调整,跋涉不忘反思。


放个套话:你的支持是我创作的最大动力!

5000字了啊

这个就不删了

Tips

  1. 您发布的文章将会展示至 里程碑专区 ,您也可以在 专区 内查看其他创作者的纪念日文章
  2. 优质的纪念文章将会获得神秘打赏哦