Sicily
文章平均质量分 78
titikdhu
这个作者很懒,什么都没留下…
展开
-
Scily 1011. Lenny's Lucky Lotto
ProblemLenny likes to play the game of lotto. In the lotto game, he picks a list of N unique numbers in the range from 1 to M. If his list matches the list of numbers that are drawn, he wins the big prize.Lenny has a scheme that he thinks is likely to be原创 2010-07-10 15:32:00 · 1860 阅读 · 0 评论 -
Sicily 1088. Cows[树状数组]
这是我第一次接触树形数组,刚开始看题的首先想法,是O(n2)的朴素算法,但是看到n是105 就放弃了...最后实在想不到什么好的方法,上网一搜发现时树形数组,之前只是听说过,连它是做什么的都不知道...然后花了一晚上去搜索属性数组的知识,发现了一片比较好理解的文章,转到了我这里,地址是http://blog.csdn.net/titikdhu/archive/2010/07/21/5751887.aspx。好了,转来说这道题吧~其实我感觉即使知道要用树形数组的话,具体的实现方法也不好想...他是先以结束位原创 2010-07-21 11:46:00 · 1116 阅读 · 0 评论 -
Sicily 1064. Subway Tree Systems[数的最小表示]
首先,关于树的最小表示,可以看下http://blog.csdn.net/titikdhu/archive/2010/07/22/5755486.aspx这里我们可以看到的是,如果重新回到某结点,则其经过路径上的0和1的个数应该相等,因为进出是相对称的。故,我们可以根据0、1的个数来划分子树,当某区间内的0、1数相同则我们就可以把他们划为一颗子树之中。然后对子树进行某个顺序的排序(虽然是可以是任意规则下的排序,不过还是字典序比较简单),最后对两颗数处理后得到的最小表达进行比较,若相同,则same否则diff原创 2010-07-22 16:33:00 · 719 阅读 · 0 评论 -
Sicily 1010. Zipper
<br />DP,f[i][j]=true表示长度为i和j的两个单词a,b可以组合成c,否则的话表示不可以<br />则转移方程为<br />f[i][j]=true((a[i-1]==c[i+j-1] && f[i-1][j])||(b[j-1]==c[i+j-1] && f[i][j-1]))<br /> <br />不多说了,还要注意的是要初始化<br />for (i=1;i<=la;i++)if (a[i-1]==c[i-1] && f[i-1][0]) f[i][0]=true;for原创 2010-07-22 23:56:00 · 817 阅读 · 0 评论 -
Sicily 1089.Farey Sequence[线性筛法求素数]
<br />这道题用到了线性筛法求素数,关于线性筛法求素数可以参看http://blog.csdn.net/titikdhu/archive/2010/07/22/5754172.aspx。<br />这道题我们可以发现一个规律,设f[n]表示n阶Farey Sequence的的元素个数,则f[n]与f[n-1]之间的差值即为以n为分母,以小于n且与n互质的数为分子组成的真分数的个数,其实就是小于或等于n的正整数中与n互质的数的数目,这正式欧拉函数(Eular‘s totient function)的定义,原创 2010-07-22 03:07:00 · 1414 阅读 · 0 评论 -
线性筛法求素数
线性筛法求素数,顾名思义,其时间复杂度为O(n)。我是第一次接触线性筛法求素数,其中有些难理解的地方的确花了很多时间。先放出代码:#include using namespace std; const long MAXP = 200000; long prime[MAXP] = {0},num_prime = 0; int isNotPrime[MAXP] = {1, 1}; int main() { for(long i = 2 ; i原创 2010-07-22 02:42:00 · 9810 阅读 · 1 评论 -
Sicily 1087. A Funny Game[博弈]
Alice and Bob ...俩人真牛...以后干脆这类题目起个名字就叫ABP(Alice and Bob Problem)吧..当n==1 || n==2时,明显先手必胜。当n==3时,明显先手必败。由于每次只可取1或2个,而取2个时,2个必须相邻,推断有:当n>3时,若n为偶数,先手无论如何取,后手可在先手对称的位置上取同等数量,于是先手必败。若n为奇数,先手取1个时,后手可在先手对称的位置上取2个,之后无论先手如何取,后手都可在先手对称的位置上取同等数量,先手必败。 先手一开始取2个时,可如上推原创 2010-07-19 14:41:00 · 1819 阅读 · 2 评论 -
Sicily 1073. Pearls[动规]
DP题,只有分想到与想不到....这里定义f[i]用来存储有i种pearl时的最小花费,则这里可以得出以种类数为状态的动规,先给出转移方程f[i]=min{f[j]+(need[k]+need[k+1]+...+need[i]+10)*price[i]}(1这里有方程可以看出,是将种类j和i之间的pearl都按照i的价格计算得出的最小值,j的取值为小于i的任意非负整数,当j=0是,即将所有pearl都按照第i中的价格出售的总值,由于不存在第0种的情况,故数量求和时,k从1开始。DP题还是多做才能掌握啊...原创 2010-07-19 15:48:00 · 645 阅读 · 0 评论 -
Sicily 1050. Numbers & Letters
<br />这道题也没什么好说的,直接DFS就可以了,只是要注意一句话“The aim is to use some arithmetic on (some of) the five numbers to form the target number.”,注意黑体的some of。<br /> <br />代码(几乎没剪枝):<br />#include <iostream>#include <cstring>using namespace std;int q,m,dest;int a[6]原创 2010-07-15 14:29:00 · 2141 阅读 · 0 评论 -
Sicily 1034. Forest
看了BBS上的题目分类说要DFS,但是听了舍友的建议,发现用一位数组存貌似也比较方便,所以就用了一位数组存。这个一位数组的元素是一个结构体,包括三个元素,fa、level、in分别表示父节点下标、当前节点层数、当前节点入度数。首先要先考虑特殊情况,这一点其实样例中已经给出了,就是当m=0的时候,森林的深度为0,而其宽度为结点个数(因为都是根节点,我本来YY m=0时只会输出0 1...结果...)。读入时更新fa和in,当in>=2时用flg记录下来,表示已经出现“two edges pointing to原创 2010-07-14 22:54:00 · 917 阅读 · 0 评论 -
Sicily 1049. Mondriaan
直接上递推公式 f[i]=3*f[i-1]+f[i-2]-f[1-3] (i>=3)递推公式为 f[i]=2*(f[0]+f[1]+...+f[n-3])+3*f[n-2]+2*f[n-1]长度为1的区间内可能有2种情况,即两个正方形或一个长方形长度为2的区间内去掉长度为1的区间中的情况有3种情况,即上面两个正方形,下面一个长方形,上下颠倒又是一种,还有两个长方形,共三种长度大于或等于3的区间中想要不与长度为2的情况重复,只能两个长方形相互重叠一个长度,在空缺处补正方形,上下颠倒即有两种由以上可得通项公式,原创 2010-07-11 01:53:00 · 1203 阅读 · 0 评论 -
Sicily 1045. Space Management[离散化]
基本思想:本题用的是离散化。1 对读入的每个矩形的左下方与右上方的横纵坐标分别保存在数组p,q中。(也要将读入的点的坐标存在rgl[]中)for (int i=1;i>sx>>sy>>w>>h; rgl[i].sx=sx; rgl[i].sy=sy; rgl[i].ex=sx+w; rgl[i].ey=sy+h; p[i*2-1]=sx; q[i*2-1原创 2010-07-11 17:07:00 · 1112 阅读 · 0 评论 -
Sicily 1022. Poor contestant Prob
ProblemAs everybody known, “BG meeting” is very very popular in the ACM training team of ZSU. After each online contest, they will go out for “smoking”. Who will be the poor ones that have to BG the others? Of course, the half who solve less problems. The原创 2010-07-10 00:36:00 · 3832 阅读 · 3 评论 -
Sicily 1039. Phone Home
<br />其实这道题难度不大的,只不过图论的染色问题好久没写过了(记得上次写估计还是高一吧...),所以写的时候又查了些时间,现在写完了,就干脆记到这吧~<br /> <br />这道题要求相邻(距离不大于20)的两个塔之间的频段不相同,即可以与着色问题相联系,即相邻两个点的颜色不同,这样这道题就成了典型的着色问题。<br /> <br />直接看代码注释解释更方便:<br />#include <iostream>#include <cstring>using namespace std;i原创 2010-07-11 21:04:00 · 802 阅读 · 0 评论 -
Sicily 1031. Campus
<br /> 这道题就不贴题目了,主要问题在于对输入数据的处理,Dijkstra不会存在太多的难度。 这道题目的输入是地点名,怎么样将字符串转化成数字并作为一个查找依据,这是这道题所要解决的问题,看过别人的解体思路,发现了一个很好用的STL类,map,这个类是利用红黑树将一种数据映射为另一种数据类型,在这里我们就可以将字符串string类型映射为int型。 在Dijkstra的过程中,利用到了STL中的priority_queue,即优先队列,利用该队列以结点到树的距离为判断原创 2010-07-10 21:35:00 · 1976 阅读 · 3 评论 -
Sicily 1294. 高级机密[数论]
<br />这道题其实没什么难度,放在这里只是想要对那个数学公式有个记录<br /> <br />即,x*y mod c=x*(y mod c) mod c<br /> <br />如此,求a^b mod c就容易多了~一个循环就行~<br /> <br />代码:<br />#include <iostream>using namespace std;int main(){ int a,b,c; cin>>a>>b>>c; int x=a%c; for原创 2010-07-28 23:14:00 · 1030 阅读 · 0 评论