自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 uva 10655 Contemplation! Algebra(矩阵快速幂)

题目链接:点击打开链接一开始以为只要用求根公式求出a,b然后就用常数快速幂就可以解决。然而想的太简单了,题目只说p,q是整数,但a,b有可能是实数,所以不能用简单的求根公式来做。f(n) = a^n+b^nf(n-1) = a^(n-1)+b^(n-1)-f(n-1)*(a+b) = a*b^(n-1)+b*a^(n-1)+f(n)-

2016-10-30 19:58:44 410

原创 poj 3737 UmBasketella(三分)

我们都知道 二分查找 适用于单调函数中逼近求解某点的值。如果遇到凸性或凹形函数时,可以用三分查找求那个凸点或凹点(即最值)。还有通过这道题知道了,输出doubleG++用%lf会wa,一定要用%f,而C++用%lf和%f都可以。题意:给出圆锥的表面积(包含底面)。求其最大体积,以及此时的底面半径及高代码:#include

2016-10-30 19:42:57 556

原创 hdoj 2852 KiKi's K-Number(树状数组+二分)

要多次查询大于某个值得第k个值。所以可以用树状数组来维护这个容器,用二分来查询这个值。代码:#includeusing namespace std;typedef long long ll;const int maxn = 1e5+5;ll a[maxn], tree[maxn];int lowbit(int x) { return x&(-x);

2016-10-29 17:04:10 456

原创 poj 3321 Apple Tree(dfs标号+树状数组)

很好的一个题,讲一个树通过标号,巧妙的转换成了树状数组。参考思路:点击打开链接思路很巧妙,我们通过自己来编号所有苹果,每个节点保存两个值,左值为本身,右值为其包含的所有后代中最大的编号我们可以通过搜索来进行编号,在编好号之后,我们可以知道,对于某一点而言,我们是先通过这个点搜完所有他的后

2016-10-28 19:52:40 651

原创 uva 10870 Recurrences(矩阵快速幂)

类似斐波那契,d为几构造几阶的矩阵即可。题目:点击打开链接代码:#includeusing namespace std;typedef long long ll;ll d, n, m, a[16], f[16];struct node{ ll s[16][16]; void init(void) { memset(s, 0, sizeof(s)); }};

2016-10-28 13:05:31 386

原创 hdoj 1709 The Balance(母函数)

因为是天平,所以组合之间的差值也都是可以得到的,这差值也是新的组合数。代码:#include#include#includeusing namespace std;const int maxn = 1e4+5;int n, c1[maxn], c2[maxn], num[maxn], ans[maxn];int main(void){ while(cin >>

2016-10-27 15:53:50 520

原创 poj 2785 4 Values whose Sum is 0(二分)

直接暴力是复杂度是n^4,可以分成两组,ab、cd各一组,先求出ab能组成的数,然后对其排序,再求cd能组成的数的同时二分ab能组成的数确定有几组能组成0。这样就把复杂度降到了n^2*logn.再二分找ab中有多少符合的数时巧妙的用到了upper_bound和lower_bound的差。代码:#include#include#include#includeu

2016-10-27 12:49:25 385

原创 hdoj 2082 找单词(母函数)

用母函数找出组成的价值代码:#includeusing namespace std;const int maxn = 105;int num[30], c1[maxn], c2[maxn];int main(void){ int t; cin >> t; while(t--) { for(int i = 1; i <= 26

2016-10-26 21:31:45 434

原创 hdoj 1171 Big Event in HDU(母函数/多重背包)

题意很简单,n种物品,每个物品对应一个价值和数量。让你竟可能的分成相等的两份。可以设背包容量为sum/2用多重背包解决。也可以用母函数来解决,计算能组成的最接近sum/2的值。母函数可以解决很多背包问题。。但是速度一般比用dp做慢好多。。母函数代码:1800ms#includeusing namespace std;const int

2016-10-26 21:13:37 659

原创 hdoj 3015 Disharmony Trees(树状数组)

思路和poj1990一样,开两个树状数组,分别维护左右的数量和距离和。注意要使用long long。代码:#includeusing namespace std;typedef long long ll;const int maxn = 1e5+5;ll tree_num[maxn], tree_dis[maxn];struct node{ int

2016-10-24 14:39:04 351

原创 hdoj 4965 Fast Matrix Calculation(矩阵快速幂)

线代课上还教过这个公式(AB)^n=A*(BA)^(n-1)^B。。。可以用这个公式优化不然计算出C=A*B是个很大的矩阵再进行求幂,复杂度会非常高。代码:#includeusing namespace std;const int maxn = 1005;int ans[maxn][maxn], res[maxn][maxn], a[maxn][maxn], b[

2016-10-24 00:26:06 374

原创 hdoj 2102 A计划(简单bfs)

特别要注意的是,如果时光机对面仍然是时光机..这样是过不去的,题目也没说这样不可以过啊..坑代码:#include#include#include#includeusing namespace std;const int maxn = 15;char pic[2][maxn][maxn];bool book[2][maxn][maxn];int row, col,

2016-10-23 19:39:31 440

原创 lightoj1085 - All Possible Increasing Subsequences(树状数组)

给你一个数列,问你有几个递增子序列(单个数字也算一个)

2016-10-23 18:27:57 318

原创 poj 1990 MooFest(树状数组)

题意:N头奶牛每头耳背程度v,坐标x。两牛交流需要音量为distance * max(v(i),v(j)),求所有牛两两交流所需总和?思路:对耳背进行升序,一头一头的加入牛,这样加入每一头的时候,这头牛的耳背程度肯定是最大的。开两个树状数组,分别记录距离和牛数量。每次分别查询左右两边的牛数量和距离和。代码:#include#include#include

2016-10-19 23:59:18 369

原创 hdoj 4549 M斐波那契数列(费马小定理降幂,矩阵快速幂)

一开始以为和斐波那契差不多,很简单的就能构造出矩阵。。。结过是乘法,硬是构造不出来。可以由F[0] = a,F[1] = b,F[n] = F[n-1] * F[n-2] ( n > 1 ) 推出fn = a^fib(n-1)*b^fib(n)%mod可知这个指数是相当大的,所以需要用费马小定理或是欧拉定理降幂。a ^ n = a ^ (n % euler ( M

2016-10-19 20:37:00 554

转载 三个重要的同余式——威尔逊定理、费马小定理、欧拉定理 + 求幂大法的证明

转自:http://blog.csdn.net/synapse7/article/details/19610361一、威尔逊定理若p为质数,则p|(p-1)!+1亦:(p-1)! ≡ p-1 ≡ -1(mod p)例题:HDU 2973 YAPTCHA (威尔逊定理及其逆定理)解题报告见http://blog.csdn

2016-10-19 19:41:04 728

原创 hdoj 4686 Arc of Dream(矩阵快速幂)

一个不难构造的矩阵快速幂,自己硬是找了两天才找到自己错在细节上的东西。自己犯得错:1.指数是long long,自己却传了个int2.构造单位矩阵前,只是把对角线赋值为1,却忘了memset其他值都为0希望以后别因为这些小错,耽误那么多的时间!代码:#includeusing namespace std;typedef long long ll;

2016-10-19 16:52:48 427

原创 Codeforces Round #377 (Div. 2) C. Sanatorium(贪心,二分)

主要是要能想到贪心策略,要尽量在后面几天考。又因为结果肯定是单调的,一个能考完的点的右边肯定是都能考完,一个不能考完的点的左边肯定是不能考完的。所以就可以用二分。代码:#includeusing namespace std;const int maxn = 1e5+5;int n, m, can[maxn], need[maxn];bool book[maxn]

2016-10-18 21:41:37 368

原创 poj 3067 Japan(逆序数)

只是简单的求逆序数,还是re一次,wa一次。re注意的是两个岛各最多1000城市,所以路可以有1e6wa注意的是交叉点的数量可以很多,会超int。代码:#include#include#include#includeusing namespace std;const int maxn = 1e6+5;int x, y, n, tree[maxn]

2016-10-17 00:18:01 441

原创 hdoj 1514 Stars(树状数组类似求逆序)

星星的层数就是该星星左下(包括正左和正下)的数量。每次读到一颗星星查询x的前缀和即为比自己小的星星数即层数,查完再update该点+1即可。

2016-10-16 23:28:31 426

原创 poj 2299 Ultra-QuickSort(树状数组求逆序数)

求逆序数的模板题。讲用树状数组求逆序数不错的博客:点击打开链接注意需要离散化,ans需要用long long代码:#include#include#include#includeusing namespace std;const int maxn = 5*1e5+5;int tree[maxn], ra[maxn], n;struct node{

2016-10-16 20:36:33 436

转载 巴什博奕

摘自:点击打开链接一.  巴什博奕(Bash Game):  A和B一块报数,每人每次报最少1个,最多报4个,看谁先报到30。这应该是最古老的关于巴什博奕的游戏了吧。其实如果知道原理,这游戏一点运气成分都没有,只和先手后手有关,比如第一次报数,A报k个数,那么B报5-k个数,那么B报数之后问题就变为,A和B一块报数,看谁先报到25了,进而变为20,15,10,5,当到5

2016-10-15 17:30:23 569

转载 威佐夫博弈

摘自:点击打开链接威佐夫博奕(Wythoff Game)定义:有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。思考:把两堆石子的集合写为(a,b)不失一般性令我们只考虑a我们依次考虑(0,0)-(0,*)……(n,n)-(n,*)的情况。把所有状态看成一个二维数组,我们只需考虑上三角的

2016-10-15 17:22:17 454

原创 hdoj 4990 Reading comprehension(矩阵快速幂)

找到递推式,接下来构造矩阵就可以了。还要注意用long long存矩阵代码:#includeusing namespace std;typedef long long ll;ll m;struct node{ ll s[3][3]; node() {} node(ll a, ll b, ll c, ll d, ll e, ll f, ll g, ll

2016-10-15 16:07:58 431

转载 尼姆博弈

转载自:点击打开链接题型尼姆博弈模型,大致上是这样的:有3堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取1个,多者不限,最后取光者得胜。 分析1、首先自己想一下,就会发现只要最后剩两堆物品一样多(不为零),第三堆为零,那面对这种局势的一方就必败那我们用(a,b,c)表示某种局势,首先(0,0,0)显然是必败态,无论谁面对(0,0,0

2016-10-14 21:32:29 780

原创 Codeforces Round #365 (Div. 2) B. Mishka and trip

自己写了好久,弄了好多预处理,才勉强a了,,再去看看大神的代码,自己还是差的太远了。。菜鸡我的:#includeusing namespace std;const int maxn = 1e5+5;typedef long long ll;ll a[maxn], b[maxn], num, sum1[maxn];int main(void){ int n, k;

2016-10-13 22:45:14 360

原创 hdoj 4565 So Easy!(构造无理数共轭,矩阵快速幂)

最难的是要想到无理数共轭...参考题解:点击打开链接还要注意注意负数的取模,可以先+mod再进行取模.代码:#includeusing namespace std;typedef long long ll;ll a, b, m;struct node{ ll s[2][2]; node() {} node(ll a, ll b, ll c,

2016-10-13 20:53:03 748

原创 hdoj 5015 233 Matrix(矩阵的构造)

一开始根本没想到可以这样构造矩阵,看了半天也是半天才看懂,太巧了这题。。较好的讲解:点击打开链接还要注意的是要使用long long代码:#include#include#includeusing namespace std;const int mod = 10000007;int n, m, N;struct node{ long l

2016-10-12 23:33:17 457

原创 hdoj 1575 Tr A(矩阵快速幂,模板题)

矩阵也直接给了不用推了。。代码:#includeusing namespace std;const int mod = 9973;int n;struct node{ int s[15][15];};node mul(node a, node b){ node t; memset(t.s, 0, sizeof(t.s)); for(

2016-10-12 21:06:36 505

原创 fzu 1683 纪念SlingShot(矩阵快速幂)

题意:f(0)=1,f(1)=3,f(2)=5,f(n)=3f(n-1)+2f(n-2)+5f(n-3)。求s(n)=(f(0)+f(1)……+f(n))%2009。思路:S(n)=S(n-1)+F(n)=S(n-1)+3F(n-1)+2F(n-2)+7F(n-3),因此构造矩阵:代码://注意考虑n=0,1时的输出#include

2016-10-12 20:59:57 547

原创 Codeforces 450B Jzzhu and Sequences(矩阵快速幂)

f1 = x, f2 = y;    fi = f(i-1) + f(i+1)        fi = f(i-1)-f(i-2);类似于斐波那契构造矩阵| an| |  1 -1 || an-1 || |=  | | * ||| an-1| | 1 0| | an-2 |代码:#include

2016-10-12 18:08:16 1104

原创 poj 3070 Fibonacci(矩阵快速幂模板题)

裸的矩阵快速幂,题目里连矩阵都告诉你了。代码:#include#include#include#includeusing namespace std;const int mod = 1e4;struct node{ int s[2][2]; node() {} node(int a, int b, int c, int d) {

2016-10-12 14:36:38 366

转载 java新特性之try-with-resources

这个所谓的try-with-resources,是个语法糖。实际上就是自动调用资源的close()函数。和Python里的with语句差不多。例如:[java] view plain copy static String readFirstLineFromFile(String path) throws IOException {  

2016-10-10 19:21:53 436

原创 uva 11987 Almost Union-Find(并查集的删除操作)

题意和思路就引用kk(@儿子)的吧:题意:初始时,一共有n个元素的组合1,2,3....n给出三个操作1 p q:合并p,q所在的集合2 p q:把p移动到q所在的集合3 p:输出p所在的集合的元素的个数思路:1,3相当简单,赤裸裸的并查集就好了 麻烦的是2,并查集是单向的,只知道父亲不知道儿子 所有如果i是叶子节点无所谓

2016-10-09 11:32:12 446

原创 poj 2406 Power Strings(kmp next数组的应用)

分析转自:http://www.cnblogs.com/zhanzhao/p/4761477.html大意:给出一个字符串 问它最多由多少相同的字串组成 如  abababab由4个ab组成 分析:kmp中的next数组求最小循环节的应用例如 ababab  next[6] = 4; 即 ababab   ababab

2016-10-08 14:27:20 561

原创 hdoj 2087 剪花布条(kmp)

kmp模板题,数据很弱,暴力也能过。kmp代码:#includeusing namespace std;const int maxn = 1005;char s[maxn], t[maxn];int Next[maxn], ans;void makeNext(void){ int len = strlen(s); Next[0] = Next[1] =

2016-10-08 13:49:43 477

原创 poj 3211 Washing Clothes(01背包)

两个人同一时刻只能洗同一颜色的衣服,所以可以按颜色进行分组计算,最后求和。洗完同一颜色的总时间是固定的,所以两个人洗的时间最短是要让这两个人洗这种颜色的衣服尽可能接近,因此可以把总时间的一半作为背包容量,然后求01背包,洗这种颜色衣服的最短时间即为总时间减去背包的最大价值.代码:#include#include#include#include#i

2016-10-08 13:02:10 368

原创 Codeforces Round #374 (Div. 2) C. Journey(dfs+dp)

dp[i][j]表示在i点出走过j个点所需的最短时间。状态转移方程:dp[i][j] = min(dp[i][j], dp[k][j-1]+dis[k][i])

2016-10-07 15:20:11 370

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除