三分

给定平面内 \(n <= 2000\) 个节点, 求平面内一点使得到所有点的欧几里得距离和最小

确定 \(y\) 轴时 \(x\) 轴满足单峰函数

\(x\) 轴同理

三分套三分即可

深度优先搜索

从起始状态少的一侧开始搜索更优

例题

给你一副扑克中的 \(n\) 张牌, 出的下一张牌需要为前面出牌点数之和的约数, 求一种合法的方案

此题正向搜索代码如下:

void dfs(int depth, int sum){
if(depth == n){
output();
return ;
}
REP(i, 1, n){
if(!vis[i] && sum % a[i] == 0){
vis[i] = 1;
dfs(depth + 1, sum + a[i]);
vis[i] = 0;
}
}
}

显然初始分支很多, 考虑逆向搜索

void dfs(int depth, int left){
if(depth == 0){output();return ;}
REP(i, 1, n){
if(!vis[i] && (left - a[i]) % a[i] == 0){
vis[i] = 1;
dfs(depth - 1, left - a[i]);
vis[i] = 0;
}
}
}
//调用
dfs(n, sum[a[i]]);

初始分支减少, 搜索量减少

meet-in-the-middle

在指数级别复杂度显然无法承受时, 分别从两侧开始搜索, 在中间相遇, 减少搜索量

一般分别做 \(dfs\) 后, 在左边利用二分查找(或各种数据结构)寻找对应右边的值, 得到解的个数(用 \(STL\ map\) 也是很好的选择)

当发现有 \(\%\) 的时候大大降低搜索次数

通常降低次数的方式是

  1. 减少调用量(整除才进入)
  2. 枚举因子

数学部分

exgcd

\[gcd(a,b) = !b ? a : gcd(b, a \% b)
\]

当 $$b == 0$$ 时, 有 $$gcd(a, 0) = a$$

令 $$ax_{0} + by_{0} = gcd(a, b)$$

此时 $$a * 1 + 0 * 0 = gcd(a, 0) = a$$ 显然有

\[x_{0} = 1, y_{0} = 0
\]

现已递归求得 $$bx_{0} + (a % b)y_{0} = d$$

而$$(a%b) = a - \lfloor \frac{a}{b} \rfloor * b$$

构造成 $$ax + by = d$$ 形式得

\[ay_{0} + b(x_{0} - \lfloor \frac{a}{b} \rfloor * y_{0}) = d
\]

故 $$x = y_{0}, y = x_{0} - \lfloor \frac{a}{b} \rfloor * y_{0}$$

Code

int exgcd(int a, int b, int &x, int &y){
if(!b){x = 1, y = 0;return a;}
int d = exgcd(b, a % b, x, y);
int temp = x;x = y;y = temp - (a / b) * y;
return d;
}

有关于线段树和树剖

线段树标记下推记得考虑对子节点标记的影响

若是多组询问, 初始化时记得考虑如下几个方面

    nume = 1;//原图边编号
memset(head, 0, sizeof(head));//初始化原图
tot = 0;//树剖节点
lazytag = -1;//线段树懒标记

Tony的口胡呼呼(。-ω-)zzz的更多相关文章

  1. Topcoder口胡记 SRM 562 Div 1 ~ SRM 599 Div 1

    据说做TC题有助于提高知识水平? :) 传送门:https://284914869.github.io/AEoj/index.html 转载请注明链接:http://www.cnblogs.com/B ...

  2. 口胡FFT现场(没准就听懂了)&&FFT学习笔记

    前言(不想听的可以跳到下面) OK.蒟蒻又来口胡了. 自从ZJOI2019上Day的数论课上的多项式听到懵逼了,所以我就下定决心要学好多项式.感觉自己以前学的多项式都是假的. 但是一直在咕咕,现在是中 ...

  3. BZOJ 口胡记录

    最近实在是懒的不想打代码...好像口胡也算一种训练,那就口胡把. BZOJ 2243 染色(树链剖分) 首先树链剖分,然后记录下每个区间的左右端点颜色和当前区间的颜色段.再对每个节点维护一个tag标记 ...

  4. Atcoder/Topcoder 口胡记录

    Atcoder/Topcoder 理论 AC Atcoder的❌游戏示范 兴致勃勃地打开一场 AGC 看 A 题,先 WA 一发,然后花了一年时间 Fix. 看 B 题,啥玩意?这能求? 睡觉觉. e ...

  5. NOIP2016考前做题(口胡)记录

    NOIP以前可能会持续更新 写在前面 NOIP好像马上就要到了,感觉在校内训练里面经常被虐有一种要滚粗的感觉(雾.不管是普及组还是提高组,我都参加了好几年了,结果一个省一都没有,今年如果还没有的话感觉 ...

  6. 关于有向图走“无限次”后求概率/期望的口胡/【题解】HNCPC2019H 有向图

    关于有向图走"无限次"后求概率/期望的口胡/[题解]HNCPC2019H 有向图 全是口胡 假了不管 讨论的都是图\(G=(V,E),|V|=n,|E|=m\)上的情况 " ...

  7. 「口胡题解」「CF965D」Single-use Stones

    目录 题目 口胡题解 题目 有许多的青蛙要过河,可惜的是,青蛙根本跳不过河,他们最远只能跳 \(L\) 单位长度,而河宽 \(W\) 单位长度. 在河面上有一些石头,距离 \(i\) 远的地方有 \( ...

  8. PKUSC 2022 口胡题解

    \(PKUSC\ 2022\)口胡题解 为了更好的在考试中拿分,我准备学习基础日麻知识(为什么每年都考麻将 啊啊啊) 首先\(STO\)吉老师\(ORZ,\)真的学到了好多 观察标签发现,这套题覆盖知 ...

  9. 「线性基」学习笔记and乱口胡总结

    还以为是什么非常高大上的东西花了1h不到就学好了 线性基 线性基可以在\(O(nlogx)\)的时间内计算出\(n\)个数的最大异或和(不需要相邻). 上述中\(x\)表示的最大的数. 如何实现 定义 ...

随机推荐

  1. Linux内核学习期末总结(网课)

    标签(空格分隔): 20135321余佳源 余佳源(原创作品转载请注明出处) <Linux内核分析> MOOC课程http://mooc.study.163.com/course/USTC ...

  2. Linux内核分析第七周总结

    第七章 可执行程序的装载 可执行程序的生成 可执行程序的生成: c语言代码--->经过编译器的预处理--->编译成汇编代码--->由汇编器编译成目标代码--->链接成可执行文件 ...

  3. ASP.NET MVC使用ADO.NET连接数据库

    深入理解ADO.NET友情链接:http://www.cnblogs.com/liuhaorain/category/352388.html 小白手把手:VS2017  SQL Server 2014 ...

  4. 【软件工程Ⅱ】作业二 |分布式版本控制系统Git的安装与使用

    本次作业的要去来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2097 远程库地址:https://github.com/Mol ...

  5. HTML DOM 学习笔记

    一.HTML DOM定义了所有HTML元素的对象和属性,以及访问他们的方法即:HTML DOM是关于如何获取,修改,添加,删除HTML元素的标准二.DOM节点1.分类整个文档是一个文档节点每个HTML ...

  6. PAT 甲级 1045 Favorite Color Stripe

    https://pintia.cn/problem-sets/994805342720868352/problems/994805437411475456 Eva is trying to make ...

  7. PAT 1021 个位数统计

    https://pintia.cn/problem-sets/994805260223102976/problems/994805300404535296 给定一个k位整数N = d~k-1~*10^ ...

  8. WebPage设计专业术语

    header footer master content placeholder breadcrumb 面包屑(breadcrumb)源于一个童话,在网站中就是一行层级属性链接组成的线性链接标示(我的 ...

  9. Jenkins中使用GitLab的配置

    1. 概述 在Jenkins中从GitLab上拉取代码进行打包或测试. 2. 安装 Jenkins和GitLab默认已经安装好,安装过程此处不再赘述. 在Jenkins上安装Git和Gitlab插件, ...

  10. std::binary_serach, std::upper_bound以及std::lower_bound

    c++二分查找的用法 主要是 std::binary_serach,  std::upper_bound以及std::lower_bound 的用法,示例如下: std::vector<int& ...