<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[LIN452]]></title><description><![CDATA[努力努力再努力 Since 150713]]></description><link>https://blog.youkuaiyun.com/LIN452</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; LIN452]]></copyright><item><title><![CDATA[BZOJ1539/POI2005 Double-row]]></title><link>https://blog.youkuaiyun.com/LIN452/article/details/52942138</link><guid>https://blog.youkuaiyun.com/LIN452/article/details/52942138</guid><author>LIN452</author><pubDate>Thu, 27 Oct 2016 07:20:39 +0800</pubDate><description><![CDATA[由于数据保证有一组方案达到目标,那么相同高度的士兵个数不超过2. 每列交换的次数最多是1,多次交换是无意义的. 
    那么假如身高相同的两个士兵在同一行中,它们所在的列数a,b中一定有一列要进行交换,且只有一列. 
    那么假如身高相同的两个士兵在不同行中,它们所在的列数a,b中要么都进行交换,或者都不进行交换. 
    有了列与列之间的关系就可以建对以上两类情况分别建边,进行01染色,将]]></description><category></category></item><item><title><![CDATA[BZOJ1537/POI2005 The Bus]]></title><link>https://blog.youkuaiyun.com/LIN452/article/details/52942135</link><guid>https://blog.youkuaiyun.com/LIN452/article/details/52942135</guid><author>LIN452</author><pubDate>Thu, 27 Oct 2016 07:18:18 +0800</pubDate><description><![CDATA[假设dp[i][j]表示在(i,j)位置能够接到的最多乘客数量,我们会发现很多的状态是无效的,因此只要记录到达站点的状态.由于只能向北或向东走,只可能通过西南的站点到达(i,j),也就是所有满足a<=i&&b<=j的站点(a,b).这样就有两维状态,可以通过排序+区间求值的方法降维. 
我们可以按照横坐标从小到大排序,维护纵坐标的区间最值,由于每次求的是前缀最值并且不断增大,可以用树状数组求解.#i]]></description><category></category></item><item><title><![CDATA[BZOJ1534/POI2005 Fibonacci sums]]></title><link>https://blog.youkuaiyun.com/LIN452/article/details/52942133</link><guid>https://blog.youkuaiyun.com/LIN452/article/details/52942133</guid><author>LIN452</author><pubDate>Thu, 27 Oct 2016 07:16:21 +0800</pubDate><description><![CDATA[首先把两个序列相加得到初始序列.之后就对初始序列进行调整: 
对于f[i]>=2的情况可以根据2*f[i]=f[i]+f[i-1]+f[i-2]=f[i+1]+f[i-2]转化为f[i-2]++,f[i+1]++. 
对于f[i]=1&&f[i+1]=1,根据f[i+2]=f[i]+f[i-1]转化为给f[i+2]赋值.#include<cstdio>
#include<cstring>
#incl]]></description><category></category></item><item><title><![CDATA[BZOJ153/POI2005 A Journey to Mars]]></title><link>https://blog.youkuaiyun.com/LIN452/article/details/52942131</link><guid>https://blog.youkuaiyun.com/LIN452/article/details/52942131</guid><author>LIN452</author><pubDate>Thu, 27 Oct 2016 07:14:55 +0800</pubDate><description><![CDATA[确定了起点和方向之后,旅行的过程就确定了,到达i点的花费<=到i点之间的油料数量就是题目的限制条件. 
    由于是绕圈问题,我们可以把序列复制相接,转化成序列上的问题. 
    设sum[j]sum[j] 表示到jj之前所得油料数量dis[j]dis[j]表示1到jj的距离,对于起点i,保证每个j<=i+nj<=i+n都有: 
    sum[j]−sum[i]>=dis[j]−dis[i]s]]></description><category></category></item><item><title><![CDATA[BZOJ1532/POI2005 Dicing]]></title><link>https://blog.youkuaiyun.com/LIN452/article/details/52942129</link><guid>https://blog.youkuaiyun.com/LIN452/article/details/52942129</guid><author>LIN452</author><pubDate>Thu, 27 Oct 2016 07:13:09 +0800</pubDate><description><![CDATA[直接求似乎不简单,由于题目求”最大值最小问题”,可以转化为二分答案来验证一个解是否成立.假设枚举的答案是x,那么所有人赢得的场次都<=x.而每场比赛最多只有一个人获胜,我们可以根据此信息,构图: 
设置源点与每个人建边,每个人与它所参加的每场比赛建边,每场比赛与超级汇点建边并且流量设置为1.根据此图跑一遍最大流,判断是否为m即可. #include<cstdio>
#include<cstring>]]></description><category></category></item><item><title><![CDATA[BZOJ1531/POI2005 Bank notes]]></title><link>https://blog.youkuaiyun.com/LIN452/article/details/52942122</link><guid>https://blog.youkuaiyun.com/LIN452/article/details/52942122</guid><author>LIN452</author><pubDate>Thu, 27 Oct 2016 07:10:45 +0800</pubDate><description><![CDATA[裸的多重背包,利用二进制进行优化: 
    假设有12枚面额为3的硬币,可以把它转化为 
    面值为3,6,12,15的硬币分别1枚.这样就把物品总数减少到log件.#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int M=205;
const int S=15;
const]]></description><category></category></item><item><title><![CDATA[BZOJ1529/POI2005 Piggy banks]]></title><link>https://blog.youkuaiyun.com/LIN452/article/details/52942119</link><guid>https://blog.youkuaiyun.com/LIN452/article/details/52942119</guid><author>LIN452</author><pubDate>Thu, 27 Oct 2016 07:07:43 +0800</pubDate><description><![CDATA[根据图中的信息,可以构造出一棵基环外向树.每个节点指向存放自己钥匙的节点.对于每一个连通块,其中必定会出现一个环,只要将环上任意一个存钱罐打破,那么这整个联通块中的所有存钱罐都能打开了. 
因此答案就是构图后联通块的个数.#include<cstdio>
#include<cstring>
#include<iostream>
#include<vector>
using namespace std]]></description><category></category></item><item><title><![CDATA[BOZJ1528/POI 2005Toy Cars]]></title><link>https://blog.youkuaiyun.com/LIN452/article/details/52942118</link><guid>https://blog.youkuaiyun.com/LIN452/article/details/52942118</guid><author>LIN452</author><pubDate>Thu, 27 Oct 2016 07:06:29 +0800</pubDate><description><![CDATA[假设地板上能放足够多的玩具,那么肯定一次性将所有玩具都拿下来.可是题目中有了k这个限制.为了完成题目的要求,不得不将某些玩具拿回去,使得新玩具有地方放置.那么问题就是将什么玩具拿回去.如果某个玩具x之后不再出现,那么一定将它拿走,既不会对答案产生影响,又有利于以后的玩具放置.万一没有不再用的玩具了,只能将某个暂时不玩但以后还要玩的玩具y,要选择的是下一次出现的时间最晚的玩具y. 
对于每个y,拿回架]]></description><category></category></item><item><title><![CDATA[BZOJ1527/POI 2005 Point]]></title><link>https://blog.youkuaiyun.com/LIN452/article/details/52942114</link><guid>https://blog.youkuaiyun.com/LIN452/article/details/52942114</guid><author>LIN452</author><pubDate>Thu, 27 Oct 2016 07:04:27 +0800</pubDate><description><![CDATA[相似点集有一个性质,重心在点集中的位置是相同的,可以通过点集的重心判断现点集是否能还原成原点集. 
    如果两个点集的点数不同,肯定是不相似的.
移动:直接根据重心的位置,确定现点集的移动方式,使得两个点集的重心重合.
缩放:根据两个点集内的点到重心的最短距离确定缩放比例,注意如果最短距离是0要特判.
旋转:根据每个点到重心的极角给两个点集内的点排序. 
每个点记录两个参数:①到重心的距离,②排]]></description><category></category></item><item><title><![CDATA[BZOJ1526/POI 2005 Bankomat]]></title><link>https://blog.youkuaiyun.com/LIN452/article/details/52942110</link><guid>https://blog.youkuaiyun.com/LIN452/article/details/52942110</guid><author>LIN452</author><pubDate>Thu, 27 Oct 2016 07:00:37 +0800</pubDate><description><![CDATA[所有可能的输入方案一共有10000种,我们可以对每一个进行检验.对每个录像求出对应的f[i][k]表示第i个字符以后第一个字符k的位置,预处理出f数组之后就可以对每个数字进行O(1)检验了. 
    由于无法同时求出每个串的f数组,因此可以对每个串检验10000种可能,已经不可能的数字之后就不必检验了.#include<cstdio>
#include<cstring>
using namespa]]></description><category></category></item><item><title><![CDATA[BZOJ2801/POI2012 Minimalist Security]]></title><link>https://blog.youkuaiyun.com/LIN452/article/details/52845611</link><guid>https://blog.youkuaiyun.com/LIN452/article/details/52845611</guid><author>LIN452</author><pubDate>Tue, 18 Oct 2016 07:32:12 +0800</pubDate><description><![CDATA[Task 
    给出一个N个顶点、M条边的无向图，边(u,v)有权值w(u,v)，顶点i也有权值p(i)， 
并且对于每条边(u,v)都满足p(u)+p(v)>=w(u,v)。 
现在要将顶点i的权值减去z(i)，其中0<=z(i)<=p(i)。 
修改后设顶点i的权值p’(i)=p(i)-z(i)，对于每条边(u,v)都满足p’(u)+p’(v)=w(u,v)。 
求sum{z(i)}的最小值]]></description><category></category></item><item><title><![CDATA[BZOJ2802/POI 2012 Warehouse Store]]></title><link>https://blog.youkuaiyun.com/LIN452/article/details/52840488</link><guid>https://blog.youkuaiyun.com/LIN452/article/details/52840488</guid><author>LIN452</author><pubDate>Mon, 17 Oct 2016 17:50:15 +0800</pubDate><description><![CDATA[Task 
    有一家专卖一种商品的店，考虑连续的n天。 
第i天上午会进货Ai件商品，中午的时候会有顾客需要购买Bi件商品，可以选择满足顾客的要求，或是无视掉他。 
如果要满足顾客的需求，就必须要有足够的库存。问最多能够满足多少个顾客的需求。 
    n<=250,000，0<=Ai<=10^9，0<=Bi<=10^9.Solution 
     贪心. 
    在第i天库存足够时,就满]]></description><category></category></item><item><title><![CDATA[BZOJ2800/POI2012 Leveling Ground]]></title><link>https://blog.youkuaiyun.com/LIN452/article/details/52771191</link><guid>https://blog.youkuaiyun.com/LIN452/article/details/52771191</guid><author>LIN452</author><pubDate>Sun, 09 Oct 2016 22:24:42 +0800</pubDate><description><![CDATA[Task 
给出n个整数X_1,X_2,…X_n，再给出两个正整数a、b，可以进行下面四种操作： 
1. 选择正整数l,r (1<=l<=r<=n)，将X_l,X_{l+1},…,X_r都加上a。 
2. 选择正整数l,r (1<=l<=r<=n)，将X_l,X_{l+1},…,X_r都减去a。 
3. 选择正整数l,r (1<=l<=r<=n)，将X_l,X_{l+1},…,X_r都加上b。 
4]]></description><category></category></item><item><title><![CDATA[BZOJ2799/POI2012 Salaries]]></title><link>https://blog.youkuaiyun.com/LIN452/article/details/52770735</link><guid>https://blog.youkuaiyun.com/LIN452/article/details/52770735</guid><author>LIN452</author><pubDate>Sun, 09 Oct 2016 21:29:30 +0800</pubDate><description><![CDATA[Task 
    给出一棵n个结点的有根树，结点用正整数1~n编号。 
每个结点有一个1~n的正整数权值，不同结点的权值不相同， 
并且一个结点的权值一定比它父结点的权值大（根结点的权值最大，一定是n）。现在有些结点的权值是已知的，并且如果一个结点的权值已知，它父结点的权值也一定已知。 
问还有哪些结点的权值能够唯一确定。 
n<=1,000,000, 1<=pi<=n, 0<=zi<=n.Sol]]></description><category></category></item><item><title><![CDATA[BZOJ2798/POI 2012 Bidding]]></title><link>https://blog.youkuaiyun.com/LIN452/article/details/52770510</link><guid>https://blog.youkuaiyun.com/LIN452/article/details/52770510</guid><author>LIN452</author><pubDate>Sun, 09 Oct 2016 21:05:45 +0800</pubDate><description><![CDATA[Task 
    A和B两个人在玩一个游戏，这个游戏是他们轮流操作一对整数(x,y)。 
初始时(x,y)=(1,0)，可以进行三种操作： 
1. 将(x,y)变成(1,x+y)。 
2. 将(x,y)变成(2x,y)。 
3. 将(x,y)变成(3x,y)。 
给定正整数n (n<=30,000)，如果x+y>=n时就不能进行后两种操作。 
如果某个人操作后y>=n，他就输掉了。 
假如A为先手]]></description><category></category></item><item><title><![CDATA[BZOJ2798/POI2012 Squarks]]></title><link>https://blog.youkuaiyun.com/LIN452/article/details/52770390</link><guid>https://blog.youkuaiyun.com/LIN452/article/details/52770390</guid><author>LIN452</author><pubDate>Sun, 09 Oct 2016 20:51:54 +0800</pubDate><description><![CDATA[Task 
    设有n个互不相同的正整数{X1,X2,…Xn}，任取两个Xi,Xj(i≠j)，能算出Xi+Xj。现在所有取法共n*(n-1)/2个和，要你求出X1,X2,…Xn。 
3<=n<=300, 每个正整数不超过10^8Solution 
    假设原序列是单调递增的,f(i,j)=xi+xjf(i,j)=x_i+x_j. 
    对于所有a＜ia＜i并且b＜jb＜j,都有f(i,j]]></description><category></category></item><item><title><![CDATA[BZOJ2796/POI2012 Fibonacci Representation]]></title><link>https://blog.youkuaiyun.com/LIN452/article/details/52770105</link><guid>https://blog.youkuaiyun.com/LIN452/article/details/52770105</guid><author>LIN452</author><pubDate>Sun, 09 Oct 2016 20:22:17 +0800</pubDate><description><![CDATA[Task 
    Fib数列0,1,1,2,3,5,8,13,21。 
给出一个数字，用FIB数列各项加加减减来得到。例如 
10=5+5 
19=21-2 
求出通过加减得到K的最少项数. 
1<=K<=10^17.Solution 
    有一个贪心的思路,每次找到离K最近的两项f(i),f(i+1),再把问题转化为求K-f(i),f(i+1)-K即可.用计划搜索优化.我是将10^7以内的数]]></description><category></category></item><item><title><![CDATA[BZOJ2795/POI2012 A horrible poem]]></title><link>https://blog.youkuaiyun.com/LIN452/article/details/52769834</link><guid>https://blog.youkuaiyun.com/LIN452/article/details/52769834</guid><author>LIN452</author><pubDate>Sun, 09 Oct 2016 19:44:35 +0800</pubDate><description><![CDATA[Task 
给出一个由小写英文字母组成的字符串S，再给出q个询问，要求回答S某个子串的最短循环节。 
如果字符串B是字符串A的循环节，那么A可以由B重复若干次得到。  
n<=500,000, q<=2,000,000.Solution 
    假如最短循环节为lenlen,设t=n/lent=n/len,现在的问题就是找到最大的t. 
t肯定是n的因子,那就可以直接枚举n的所有素因子k,若当前的]]></description><category></category></item><item><title><![CDATA[HDU5808(Bestcoder Round86)Price List Strike Back]]></title><link>https://blog.youkuaiyun.com/LIN452/article/details/52761348</link><guid>https://blog.youkuaiyun.com/LIN452/article/details/52761348</guid><author>LIN452</author><pubDate>Sun, 09 Oct 2016 18:49:22 +0800</pubDate><description><![CDATA[题目戳这假如我们已知第i天可以购买的所有商品,那么剩下就是01背包的问题了.能够购买的所有商品由两个条件决定:编号下标和距离.我们可以减少一个维度使问题更简单.假如把询问和点一起按照距离d排序,那么就能保证询问到i时,所有考虑到的点x一定满足dis[x]<=didis[x]<=di这一条件.现在问题就转化成了:询问:在[Li,Ri][Li,Ri]区间中能否找到一些点满足其价值之和=sumisumi.]]></description><category></category></item><item><title><![CDATA[BZOJ2794/POI2012 Cloakroom]]></title><link>https://blog.youkuaiyun.com/LIN452/article/details/52761327</link><guid>https://blog.youkuaiyun.com/LIN452/article/details/52761327</guid><author>LIN452</author><pubDate>Sat, 08 Oct 2016 22:41:47 +0800</pubDate><description><![CDATA[Task 
有n件物品，每件物品有三个属性a[i], b[i], c[i] .(a[i]＜b[i]) 
再给出q个询问，每个询问由非负整数m, k, s组成，问是否能够选出某些物品使得： 
1. 对于每个选的物品i，满足a[i]<=m且b[i]>m+s。 
2. 所有选出物品的c[i]的和正好是k。 
n<=1,000, q<=1,000,000. 
c[i]<=1,000, 1<=a[i]＜b[i]]></description><category></category></item></channel></rss>