![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
博弈+概率+置换
文章平均质量分 77
clevermike
这个作者很懒,什么都没留下…
展开
-
SPOJ 1421 - Goods(置换)
题意:一个1到n的排列,可以对两个数字进行交换,每轮可进行多次交换,但是每个数字每轮只能交换一次,问几轮才能把排列变成从1,2,3...,n的排列思路:找出所有的循环节,长度为2的循环节只需要进行一次,剩下的则需要两次证明:长度为2的循环节只进行一次交换显而易见,而剩下的可以拉成一条链的形式(将排列与1,2,3,...,n的排列连线),如果把这条链由两头向中间依次交换(即第i个与第k+1-原创 2013-07-24 14:57:42 · 798 阅读 · 0 评论 -
SGU 153 - Playing with matches(博弈)
题意:有一堆火柴,A和B取,谁先取完谁就输了,每人只能取ai个(1循环节不会超过2^9,打出SG表,然后暴循环节#include #include int a[12],n,m;int SG[1060],hash[1060];void GetSG(int Array[], int N){ int i, j; memset(SG, 0, sizeof(SG));原创 2013-07-26 16:31:07 · 988 阅读 · 0 评论 -
HDU 4259 - Double Dealing(求循环节)
首先将扑克牌进行一次置换,然后分解出所有的循环节,所有循环节的最小公倍数即为答案#include #include #include using namespace std;#define LL long longint n,k;LL d[850],ct;int vis[850];int a[850];int dfs(int x){ if(!vis[a[x]])原创 2013-08-03 16:52:11 · 1009 阅读 · 0 评论 -
SGU 144 - Meeting(连续概率)
有两个人在x到y时间段约会,先到的先等,等z分钟,求他们约会成功的概率画个图就明白了#include int main(){ double x,y,z; scanf("%lf%lf%lf",&x,&y,&z); double p=1-z/(y-x)/60; printf("%.8lf\n",1-p*p); return 0;}原创 2013-07-28 20:32:18 · 761 阅读 · 0 评论 -
HDU 4649 - Professor Tian(2013MUTC5-1007)(概率)
不知道这题算作什么类型的题目,反正很巧妙,队友小杰想了没一会就搞定了为了学习这种方法,我也搞了搞,其实思路不难想,位运算嘛,只有0和1,而且该位的运算只影响该位,最多20位,一位一位地计算即可,只需要把每位的情况考虑清楚#include int a[210];char op[210];double p[210];int main(){ int n,cas=0;原创 2013-08-06 21:29:02 · 885 阅读 · 0 评论 -
HDU 4465 - Candy(概率与数学优化)
2012成都Regional的B题,花了一个小时推出了式子,但是搞了好久发现都控制不了精度,后来突然想到组合数可以用log优化,改了之后就AC了比较水的概率题#include #include #define maxn 200005double f[2*maxn];double c(int a,int b){ return f[a]-f[a-b]-f[b];}int原创 2013-08-31 09:53:46 · 829 阅读 · 0 评论