学好数理化,走遍天下都不怕,这里记录自己新学到的(没有卵用)的数学知识
HDU5365中要寻找所有整点组合起来形成正三、四、五、六边形的情况,当时死活不知道怎么说,神tm出题人竟然在题解中说“地球人都知道整点是不能构成正五边形和正三边形和正六边形的”,好吧大概我不是地球人吧……总之如上,整点不能构成正五边形和正三边形和正六边形。
代码又写不下去了,又像往常一样点开了空间的那年今日。看到了罗xx以前的一条说说,“im waiting”,好像是那段时期的,看看时间觉得纳闷,“2013年?不是去年的事情吗”,转念一想,原来我高中毕业已经一年啦,离高二暑假都已经两年了。但是回想起来,那种快乐的感觉真的仿佛就在眼前一样,给我一种往事还历历在目的感觉,但是细细一回想,却发现自己对过去的回忆都是片段式的,不是缺了开头,便是缺了结尾。以前觉得往事如烟这个词蛮装逼的,并不理解,现在才明白往事真的是如烟啊,如烟般虚幻,明明你能感觉到它,但是如果你要看个真切,努力一抓,往事便会碎成一片一片,给你一种无力的感觉。
发现自己在做题的时候经常会重复犯一些很难发现的小细节错误,在这里记录下来,望谨记。
unsigned LL ou = 0;
ou += (unsigned LL)pow(2.0,i);
平时我在写题的时候从来不会注意强制转化的问题,但其实我已经好几次因为强制转化没有处理而wa了,而且每一次都会要找半天,pow函数返回的类型为double在加在例如LL,int等类型的数据上的时候,会出现一丝误差,需要强制转换才能解决,所以以后使用类似pow这种返回值和需要使用的值数据类型不同的时候,注意强制转化。
在使用STL类priority_queue时,对于队列里面的每一个值是默认从小到大排序的,也就是说如果你插入队列的值为1,2,3,4,5,那么从队列口开始依次是5,4,3,2,1,当你想要自定义优先队列的排列方式时,需要自己手写一个cmp结构体重载一下。举例如下
struct cmp
{
bool operator()(const pair<int,int> a,const pair<int,int> b)const
{
if(a.first != b.first)
return a.first < b.first;
return a.second > b.second;
}
};
priority_queue< pair<int,int>,vector<pair<int,int> >,cmp>hp;
这是一个手写的存储形式为pair的优先队列,需要注意的是,如果你需要先按照第一个值从小到大,第二个值从大到小排列,根据优先队列默认less<T>
的效果,你需要把所有手写的排序顺序反一下,比如上面的代码,如果你输入五个pair分别为(1,2),(1,3),(2,3),(2,4),(2,5),那么排好序后从队列头开始依次为(2,3),(2,4),(2,5),(1,2),(1,3)。优先队列可以在需要节省时间的时候用到,前提是你的代码不会爆内存。
以前每次看见dp都是直接跳过,今天遇到了一道用概率dp求期望,仔细一想发现其实还是不难的。(不过要是想我理解什么是期望数……这辈子还是算了吧)
先有要挪用在别人blog看到的一段话:一般求概率DP或者是递推的问题,都是正着推,从初始状态往结束状态(结束状态一般是此类题要求的状态)推,所以先得到(或者说先已知)的是靠近初始状态的状态,所以想要求的当前状态是由可转移到此状态的前N可能个状态推过来的;而一般求期望DP,都是逆着推,从结束状态往初始状态(初始状态往往是此类题要求的状态)推,所以先得到(或者说先已知)的是靠近结束状态的状态,所以想要求的当前状态是由此状态对应接下来的N可能个状态推过来的。这边重点强调的是在求期望或者概率的时候到底是正推还是逆推。
没想到研究了两个多小时无果,留坑待填,题目为POJ2096,HDU4405,HDU3853
开大坑了,基本的dp还没学会,看来没几个月是填不上了。。。
一直觉得信任是个很奇怪的东西,你身边的每一个人(包括陌生人)对你的信任程度都是不同的,但其实信任程度并不和熟悉程度成正比。一个与你素不相识的陌生人,也许比一个与你关系不错的朋友更加信任你。