<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[AC，∑ndless]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/synapse7</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; synapse7]]></copyright><item><title><![CDATA[基于链表实现的珂朵莉树]]></title><link>https://blog.youkuaiyun.com/synapse7/article/details/102808802</link><guid>https://blog.youkuaiyun.com/synapse7/article/details/102808802</guid><author>synapse7</author><pubDate>Tue, 29 Oct 2019 22:18:17 +0800</pubDate><description><![CDATA[以下内容基于 CF896C Willem, Chtholly and Seniorious 来介绍。
珂朵莉树实质上是一种可以维护区间上的分裂与合并的数据结构，但要求数据是随机的，或者有大量的随机合并操作，这样才能保证维护的区间个数是一个很小的值。
一开始，我们用不同的节点表示 [1,1],[2,2],...,[n,n][1,1],[2,2],...,[n,n][1,1],[2,2],...,[n...]]></description><category></category></item><item><title><![CDATA[Codeforces 1251D Salary Changing (二分+最大化中位数)]]></title><link>https://blog.youkuaiyun.com/synapse7/article/details/102785930</link><guid>https://blog.youkuaiyun.com/synapse7/article/details/102785930</guid><author>synapse7</author><pubDate>Mon, 28 Oct 2019 18:10:16 +0800</pubDate><description><![CDATA[https://codeforces.com/problemset/problem/1251/D
提供一个比官方题解还简洁的二分思路。
首先，中位数越大，发出的工资越多，这满足二分条件。
于是二分中位数，判断所发工资是否不超过 sss，整个过程如下：


二分前预处理，将数据按照 lll 从大到小排序，另外还需计算基础工资之和 baseCostbaseCostbaseCost，即所有 lll 之和...]]></description><category></category></item><item><title><![CDATA[UVa 11178 Morley's Theorem (向量旋转)]]></title><link>https://blog.youkuaiyun.com/synapse7/article/details/22299391</link><guid>https://blog.youkuaiyun.com/synapse7/article/details/22299391</guid><author>synapse7</author><pubDate>Thu, 27 Mar 2014 16:35:30 +0800</pubDate><description><![CDATA[http://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=2119


/*0.025s*/

#include
#include

struct P
{
	double x, y;
	P(double x = 0.0, double y = 0.0): x(x), y(y) {}
	v]]></description><category></category></item><item><title><![CDATA[LightOJ 1258 Making Huge Palindromes (回文&KMP)]]></title><link>https://blog.youkuaiyun.com/synapse7/article/details/22283225</link><guid>https://blog.youkuaiyun.com/synapse7/article/details/22283225</guid><author>synapse7</author><pubDate>Thu, 27 Mar 2014 13:40:28 +0800</pubDate><description><![CDATA[http://lightoj.com/volume_showproblem.php?problem=1258


首先原串+翻转过来的串必然是一个回文串，但是二者在中间可以“融合”，而KMP算法恰好可以求出最大融合长度。
所以看翻转过来的串能匹配多少原串即可，答案就是len+(len-匹配个数)。


完整代码：

/*0.140s,7548KB*/

#include
usin]]></description><category></category></item><item><title><![CDATA[LightOJ 1255 Substring Frequency (KMP模板)]]></title><link>https://blog.youkuaiyun.com/synapse7/article/details/22225425</link><guid>https://blog.youkuaiyun.com/synapse7/article/details/22225425</guid><author>synapse7</author><pubDate>Wed, 26 Mar 2014 23:27:28 +0800</pubDate><description><![CDATA[http://lightoj.com/volume_showproblem.php?problem=1255



/*0.068s,7548KB*/

#include
using namespace std;
const int mx = 1000005;

char t[mx], p[mx];
int f[mx];

void getfail()
{
	f[0] = f[1] = 0]]></description><category></category></item><item><title><![CDATA[LightOJ 1062 Crossed Ladders (二分)]]></title><link>https://blog.youkuaiyun.com/synapse7/article/details/22201985</link><guid>https://blog.youkuaiyun.com/synapse7/article/details/22201985</guid><author>synapse7</author><pubDate>Wed, 26 Mar 2014 18:57:16 +0800</pubDate><description><![CDATA[http://lightoj.com/volume_showproblem.php?problem=1062


/*0.000s,1700KB*/

#include
using namespace std;
double EPS = 1e-8;

int main()
{
	double a, b, c, j, c1, h, k, x;
	int T, cas = 0;
	scanf("]]></description><category></category></item><item><title><![CDATA[LightOJ 1203 Guarding Bananas (凸包最小顶角)]]></title><link>https://blog.youkuaiyun.com/synapse7/article/details/22198651</link><guid>https://blog.youkuaiyun.com/synapse7/article/details/22198651</guid><author>synapse7</author><pubDate>Wed, 26 Mar 2014 17:52:26 +0800</pubDate><description><![CDATA[http://lightoj.com/volume_showproblem.php?problem=1203


/*0.164s,6512KB*/

#include
using namespace std;
#define sqr(x) ((x)*(x))
const double INF = 1e100;
const double pi = acos(-1.0);
const doub]]></description><category></category></item><item><title><![CDATA[Python version 2.7 required, which was not found in the registry]]></title><link>https://blog.youkuaiyun.com/synapse7/article/details/22156055</link><guid>https://blog.youkuaiyun.com/synapse7/article/details/22156055</guid><author>synapse7</author><pubDate>Wed, 26 Mar 2014 10:27:21 +0800</pubDate><description><![CDATA[安装Python时没注册注册表？好办，把下面的代码放到你Python所在目录，运行即可。



#
# script to register Python 2.0 or later for use with win32all
# and other extensions that require Python registry settings
#
# written by Joakim ]]></description><category></category></item><item><title><![CDATA[LightOJ 1085 All Possible Increasing Subsequences (DP&离散化&树状数组)]]></title><link>https://blog.youkuaiyun.com/synapse7/article/details/22095051</link><guid>https://blog.youkuaiyun.com/synapse7/article/details/22095051</guid><author>synapse7</author><pubDate>Tue, 25 Mar 2014 21:28:21 +0800</pubDate><description><![CDATA[http://lightoj.com/volume_showproblem.php?problem=1085



先说个很快的方法——二维思考，从右下往左上离散化：
/*0.364s,2860KB*/

#include
using namespace std;
const int mx = 100005;
const int mod = 1000000007;

int tree[m]]></description><category></category></item><item><title><![CDATA[LightOJ 1009 Back to Underworld (种类并查集)]]></title><link>https://blog.youkuaiyun.com/synapse7/article/details/21969089</link><guid>https://blog.youkuaiyun.com/synapse7/article/details/21969089</guid><author>synapse7</author><pubDate>Mon, 24 Mar 2014 16:35:47 +0800</pubDate><description><![CDATA[http://lightoj.com/volume_showproblem.php?problem=1009



种类并查集实现（当然用二分图染色也可以）
/*0.204s,2820KB*/

#include
using namespace std;
const int mx = 20000;

int fa[mx * 2 + 5], rk[mx * 2 + 5], x[100005]]></description><category></category></item><item><title><![CDATA[LightOJ 1080 Binary Simulation (线段树&成段更新)]]></title><link>https://blog.youkuaiyun.com/synapse7/article/details/21929117</link><guid>https://blog.youkuaiyun.com/synapse7/article/details/21929117</guid><author>synapse7</author><pubDate>Mon, 24 Mar 2014 08:18:36 +0800</pubDate><description><![CDATA[http://lightoj.com/volume_showproblem.php?problem=1080


模板。
/*0.484s,4312KB*/

#include 
#include 
#include 
using namespace std;
#define lson l , m , rt << 1
#define rson m + 1 , r , rt << 1 | 1]]></description><category></category></item><item><title><![CDATA[SGU 108 Self-numbers 2 (另一种滚动数组)]]></title><link>https://blog.youkuaiyun.com/synapse7/article/details/21886315</link><guid>https://blog.youkuaiyun.com/synapse7/article/details/21886315</guid><author>synapse7</author><pubDate>Sun, 23 Mar 2014 20:49:53 +0800</pubDate><description><![CDATA[http://acm.sgu.ru/problem.php?contest=0&problem=108


我直接转的http://www.cnblogs.com/staginner/archive/2011/12/24/2300689.html
他写得很好：




这个题目可以直接筛出来结果，但要注意几个问题：①数组不够大，但由于推断的时候前后影响的区间并不大，因此我们可以把]]></description><category></category></item><item><title><![CDATA[SGU 104 Little Shop of Flowers (DP&打印路径)]]></title><link>https://blog.youkuaiyun.com/synapse7/article/details/21881095</link><guid>https://blog.youkuaiyun.com/synapse7/article/details/21881095</guid><author>synapse7</author><pubDate>Sun, 23 Mar 2014 18:35:29 +0800</pubDate><description><![CDATA[http://acm.sgu.ru/problem.php?contest=0&problem=104


/*15ms,142KB*/

#include
using namespace std;
const int mx = 105;

int a[mx][mx], dp[mx][mx], f;

void print(int i, int j)
{
	if (i == 0) retur]]></description><category></category></item><item><title><![CDATA[Codeforces Round #227 (Div. 2) / 387C George and Number (贪心)]]></title><link>https://blog.youkuaiyun.com/synapse7/article/details/21815395</link><guid>https://blog.youkuaiyun.com/synapse7/article/details/21815395</guid><author>synapse7</author><pubDate>Sat, 22 Mar 2014 18:12:42 +0800</pubDate><description><![CDATA[http://codeforces.com/contest/387/problem/C


/*31ms,100KB*/

#include

char str[100005];

int main()
{
	gets(str);
	int i, j, res = 0;
	for (i = 0; str[i]; i = j)
	{
		for (j = i + 1; str[j] == '0]]></description><category></category></item><item><title><![CDATA[POJ 3104 Drying (二分&最大化最小值)]]></title><link>https://blog.youkuaiyun.com/synapse7/article/details/21780333</link><guid>https://blog.youkuaiyun.com/synapse7/article/details/21780333</guid><author>synapse7</author><pubDate>Sat, 22 Mar 2014 10:10:20 +0800</pubDate><description><![CDATA[http://poj.org/problem?id=3104


一开始没注意k为1的情况，WA了一发。。
加个特判就过了。


完整代码：
/*750ms,576KB*/

#include
#include
#include
using namespace std;
const int mx = 100005;

int n, k, a[mx];

bool judge(int]]></description><category></category></item><item><title><![CDATA[POJ 3273 Monthly Expense (二分&最大化最小值)]]></title><link>https://blog.youkuaiyun.com/synapse7/article/details/21778743</link><guid>https://blog.youkuaiyun.com/synapse7/article/details/21778743</guid><author>synapse7</author><pubDate>Sat, 22 Mar 2014 09:38:17 +0800</pubDate><description><![CDATA[http://poj.org/problem?id=3273


/*63ms,556KB*/

#include
const int mx = 100005;

int n, mon, a[mx];

bool judge(int m)
{
	int sum = 0, cnt = 1;
	for (int i = 0; i < n; ++i)
	{
		sum += a[i];
		if]]></description><category></category></item><item><title><![CDATA[POJ 2932 Coneology (扫描线判断最外面的圆&set维护最近的圆)]]></title><link>https://blog.youkuaiyun.com/synapse7/article/details/21620731</link><guid>https://blog.youkuaiyun.com/synapse7/article/details/21620731</guid><author>synapse7</author><pubDate>Thu, 20 Mar 2014 15:08:49 +0800</pubDate><description><![CDATA[http://poj.org/problem?id=2932


先给圆的最左端和最右端的点排个序，当两点x相同时，左端点排在前面。
然后就是扫描了，
若扫描到的是圆的左端点，就判断圆心(y坐标)在其上方且离其最近的圆是否包含此圆，以及圆心(y坐标)在其下方且离其最近的圆是否包含此圆，若包含就continue，不包含就insert到set中；
若扫描到的是圆的右端点，就从set中era]]></description><category></category></item><item><title><![CDATA[Codeforces Round #237 (Div. 2) / 404B Marathon (fmod或long long表示浮点)]]></title><link>https://blog.youkuaiyun.com/synapse7/article/details/21595639</link><guid>https://blog.youkuaiyun.com/synapse7/article/details/21595639</guid><author>synapse7</author><pubDate>Thu, 20 Mar 2014 09:40:48 +0800</pubDate><description><![CDATA[http://codeforces.com/contest/404/problem/B


/*124ms,0KB*/

#include
using namespace std;

double a;

void f(double len)
{
	int c = ((int)(len / a)) % 4;
	len = fmod(len, a);
	if (c == 0) printf("]]></description><category></category></item><item><title><![CDATA[Codeforces Round #237 (Div. 2) / 404C Restore Graph (构造最短路径树)]]></title><link>https://blog.youkuaiyun.com/synapse7/article/details/21594659</link><guid>https://blog.youkuaiyun.com/synapse7/article/details/21594659</guid><author>synapse7</author><pubDate>Thu, 20 Mar 2014 09:28:28 +0800</pubDate><description><![CDATA[http://codeforces.com/contest/404/problem/C


思路：我们构造一颗最短路径树就行了。
若能够构造，边数必然为n-1（样例1的边数可以是两条）。
如何构造？从距离为1的点开始，逐渐往下加边，生成一颗k叉树。若在中间生成了大于k的叉，则输出-1。


完整代码：
/*265ms,4436KB*/

#include
using namesp]]></description><category></category></item><item><title><![CDATA[HDU 4741 Save Labman No.004 (异面直线距离&直线与平面的交点)]]></title><link>https://blog.youkuaiyun.com/synapse7/article/details/21333379</link><guid>https://blog.youkuaiyun.com/synapse7/article/details/21333379</guid><author>synapse7</author><pubDate>Sun, 16 Mar 2014 19:20:13 +0800</pubDate><description><![CDATA[http://acm.hdu.edu.cn/showproblem.php?pid=4741


模板题。
理论知识见代码注释。
这题背景居然是命运石之门。。

/*218ms,276KB*/

#include
#include
const double eps = 1e-9;

struct P3
{
	double x, y, z;
	P3(double x = 0.0, do]]></description><category></category></item></channel></rss>