题目大意是一个3N的棋盘,用12的骨牌覆盖的方案数

使用一个三位的二进制数表示状态,则可以有:

n行:000 ……………………………………. 000

n-1行:000 001 010 011………………… 111

为避免状态重复,我们不允许在n-1行上平放骨牌(因为等会由n-1行转移的第n行时,我们可以在n行上平放),所以我们可以构造一个矩阵来表示这些转移(具体自己画一画就知道了),即可以得到以下矩阵A:

0000000100000010000001000000100100010000001000000100000110010010然后求A的n次幂,A^n[7][7]就是我们要的答案啦~
Continue reading

题目大意:Dima送给他女友N只兔子,编号1-n(n<=3000),当给兔子喂食时,它们会产生joy值,joy的取值有三种状态:
1.当前兔子左右两边都没有已经喂过的兔子;
2.当前兔子左右两边有且仅有一边有已经喂过的兔子;
3.当前兔子左右两边的兔子均已喂过。(编号1,n的兔子显然无法满足)
现给出每只兔子三种状态下的joy值,希望你帮助Dima的女友有Inna选择某种喂食顺序,使得总的joy值最大,仅输出最大的joy值。
Continue reading

传送门:题目
怎么说呢,水题一道,直接用小根堆解决
主要是想通过这道题学习C++STL里面heap的用法
最后还是没有纠结出来,然后发现手写也不会了,就在网上找了一段,挺简洁的,以后就用这个做模板
Continue reading

这道题显然有,矩阵乘法可解(由数据范围可得)

显然有题目要求: f[n]=∑f[i] (n-k<i<n-1),矩阵乘法相关知识自行google,推荐阅读Matrix67写的一篇文章。

所以构造有数组A(k*k):

000…1

100…1

010…1

001…1

因为看k<10,我们可以先计算出f[1]~f[k],然后用矩阵乘法加速,计算出A^(n-k),最后再f*A^(n-k)乘一下就得出了。

我用的是递归式的矩阵二分取幂,后来才知道这样写会显得你很弱智……我也不知道为什么,然后就顺便再复习了一下,快速幂的非递归写法。
Continue reading

☆打鼹鼠
SuperBrother在机房里闲着没事干(再对比一下他的NOIP,真是讽刺啊……),于是便无聊地开始玩“打鼹鼠”……
描述 Description
在这个“打鼹鼠”的游戏中,鼹鼠会不时地从洞中钻出来,不过不会从洞口钻进去(鼹鼠真胆大……)。洞口都在一个大小为n(n<=1024)的正 方形中。这个正方形在一个平面直角坐标系中,左下角为(0,0),右上角为(n-1,n-1)。洞口所在的位置都是整点,就是横纵坐标都为整数的点。而 SuperBrother也不时地会想知道某一个范围的鼹鼠总数。这就是你的任务。
Continue reading

TYVJ 忠诚2 线段树

in 题解

忠诚2
描述 Description
老管家是一个聪明能干的人。他为财主工作了整整10年,财主为了让自已账目更加清楚。要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意。但是由于一些人的挑拨,财主还是对管家产生了怀疑。于是他决定用一种特别的方法来判断管家的忠诚,他把每次的账目按1,2,3…编号,然后不定时的问管家问题,问题是这样的:在a到b号账中最少的一笔是多少?为了让管家没时间作假他总是一次问多个问题。
在询问过程中账本的内容可能会被修改
输入格式 Input Format
输入中第一行有两个数m,n表示有m(m<=100000)笔账,n表示有n个问题,n<=100000。
接下来每行为3个数字,第一个p为数字1或数字2,第二个数为x,第三个数为y
当p=1 则查询x,y区间
当p=2 则改变第x个数为y

Continue reading

sillyplus

Write the code. Change the world


Student


China