Mon, 28 Oct 2019 16:23:22 +0800

master
大蒟蒻 6 years ago
parent ec8b41eef0
commit 3079560651

@ -0,0 +1,49 @@
{
"latex-workshop.intellisense.package.enabled": true,
"latex-workshop.latex.tools": [
{
"name": "xelatex",
"command": "xelatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOCFILE%"
]
},
{
"name": "pdflatex",
"command": "pdflatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOCFILE%"
]
},
{
"name": "bibtex",
"command": "bibtex",
"args": [
"%DOCFILE%"
]
}
],
"latex-workshop.latex.recipes": [
{
"name": "xelatex",
"tools": [
"xelatex"
]
},
{
"name": "xe->bib->xe->xe",
"tools": [
"xelatex",
"bibtex",
"xelatex",
"xelatex"
]
}
],
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

@ -0,0 +1,216 @@
\documentclass{ctexart}
\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{geometry}
\usepackage{lmodern}
\usepackage{fontspec}
\usepackage{pdfpages}
\usepackage{listings}
\geometry{a4paper,scale=0.75}
\pagestyle{empty}
\begin{document}
\includepdf[pages=-]{4.pdf}
\includepdf[pages=-]{省选基础算法.pdf}
\includepdf[pages=-]{1.pdf}
\includepdf[pages=-]{2.pdf}
\includepdf[pages=-]{3.pdf}
\section*{hxd's debug list}
\begin{quotation}
ACM本就逆风而行在去机房的路上被风吹翻很正常。
\end{quotation}
\begin{itemize}
\item
线段树要开4倍内存
\item
cin跑得超级慢
\item
memset 比 for循环快得多
\begin{itemize}
\item
memset总是清空整个数组有时候只清理要用到的部分用for也许更好。
\end{itemize}
\item
有多组数据时要清空全局变量(以及各种队列)
\item
\texttt{std::accumulate} 的返回类型由第三个参数(初始值)决定。
\item
进bfs的时候要记得push初始状态。 / front后记得pop。
\item
检查输出编号是否在范围内(0)。
\item
检查不存在可行解时的输出(-1)。
\item
cin不仅跑得慢而且跑得超级无敌螺旋飞天香蕉船慢。
\item
当你怎么样都过不了的时候显然不会TLE的东西TLE了或者RE试试把数组开大十倍有可能是题面打错了。
\item
explicit specialization of 'template<class \_Tp> struct std::hash' outside its namespace must use a nested-name-specifier [-fpermissive].
for example: struct std::hash<pair<int, int> > but not struct hash<pair<int, int> >
\item
看题目数据范围,或许会出现$r-l \leq 2$这样的东西。
\end{itemize}
\includepdf[pages=-]{A_brief_introduction_to_pb_ds_for_ICPC.pdf}
\includepdf[pages=-]{ICPC_Howtos_20190428.pdf}
\section*{模拟退火}
\begin{lstlisting}
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;
double y;
double F(double x) {
return 6 * pow(x, 7) + 8 * pow(x, 6)
+ 7 * pow(x, 3) + 5 * pow(x, 2) - y * x;
}
double Rand01() { return rand() / (double)RAND_MAX; }
double Rand(double T) {
int f = rand() & 1;
return (f ? -1 : 1) * T * Rand01();
}
int main() {
srand(time(NULL));
int Case;
scanf("%d", &Case);
while (Case--) {
scanf("%lf", &y);
double T = 100, T_end = 1e-6, d = 0.85, ans = F(0);
// T 初始温度T_end 结束冷却温度d 降温系数ans 答案
double x_now = 0, x_next;
while (T > T_end) {
for (int i = 0; i < 2; i++) {
x_next = x_now + Rand(T);
//他手写的rand就是【-1,1】随机 取一个然后*t*1 or -1
if (x_next < 0 || x_next > 100)
continue;
//不科学就continue
double f_next = F(x_next), f_now = F(x_now);
//计算现在与之前的值
double delta = f_next - f_now; //计算差值
cout << x_now << x_next << Rand01() << endl;
if (delta < 0 || Rand01() < exp(-delta / T)) {
// delta<0表示下一个解比当前解更优哇
// 函数值更小或者是概率接受记死exp-delta/T
x_now = x_next; //修改啊哈哈
ans = min(ans, f_next); //题目要求最小x是ans
}
}
T *= d; //降温啦啦啦
}
printf("%.4f\n", ans);
}
return 0;
}
\end{lstlisting}
\begin{verbatim}
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 5;
const double inf = 1e80;
struct xd {
double a, b, c, d;
} xx[maxn];
int n;
double l;
struct Point {
double x, y;
};
double dis(Point x, Point y) {
return sqrt((x.x - y.x) * (x.x - y.x) + (x.y - y.y) * (x.y - y.y));
}
double cos(double a, double b, double c) {
return (b * b + c * c - a * a) / (2 * b * c);
}
double dis(Point x, Point a, Point b) {
double l1 = dis(x, a);
double l2 = dis(x, b);
double l3 = dis(a, b);
if (cos(l1, l2, l3) < 0)
return l2;
if (cos(l2, l1, l3) < 0)
return l1;
double p = (l1 + l2 + l3) / 2;
double area = sqrt(p * (p - l1) * (p - l2) * (p - l3));
return area * 2 / l3;
}
double dis(double x, Point a, Point b) { return dis({x, 0}, a, b); }
double f(double x) {
double mi = inf;
for (int i = 1; i <= n; i++) {
Point aa;
aa.x = xx[i].a, aa.y = xx[i].b;
Point bb;
bb.x = xx[i].c, bb.y = xx[i].d;
mi = min(mi, dis(x, aa, bb));
}
return mi;
}
double rand01() { return rand() / (double)RAND_MAX; }
double randnext(double T) {
int sgn = rand() & 1;
double haha = (sgn ? -1 : 1) * T * rand01();
return haha;
}
int p[15];
int mls = 15;
int main() {
int Tt;
scanf("%d", &Tt);
while (Tt--) {
srand(time(NULL));
scanf("%d%lf", &n, &l);
for (int i = 1; i <= n; i++) {
scanf("%lf%lf%lf%lf", &xx[i].a, &xx[i].b, &xx[i].c, &xx[i].d);
}
for (int i = 0; i < mls; i++)
p[i] = rand01() * l;
double T = l, Tend = 1e-5, d = 0.95, ans = -1e100;
double id = 0;
double pos = 0;
while (T > Tend) {
for (int i = 0; i < mls; i++) {
double inmin = -1e100;
double pmin = p[i];
for (int i = 0; i < mls; i++) {
double add = randnext(T);
if (add + p[i] > l || add + p[i] < 0)
continue;
double tp = add + p[i];
double nexhi = f(tp);
double delta = inmin - nexhi;
if (delta < 0) {
pmin = tp;
inmin = nexhi;
}
}
p[i] = pmin;
if (inmin > ans) {
ans = inmin;
pos = pmin;
}
}
T *= d;
}
cerr << pos << endl;
printf("%.3lf\n", ans);
}
}
\end{verbatim}
\end{document}

Binary file not shown.
Loading…
Cancel
Save