博弈+概率+置换
文章平均质量分 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 · 822 阅读 · 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 · 1015 阅读 · 0 评论 -
HDU 4259 - Double Dealing(求循环节)
首先将扑克牌进行一次置换,然后分解出所有的循环节,所有循环节的最小公倍数即为答案 #include #include #include using namespace std; #define LL long long int 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 · 1049 阅读 · 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 · 789 阅读 · 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 · 909 阅读 · 0 评论 -
HDU 4465 - Candy(概率与数学优化)
2012成都Regional的B题,花了一个小时推出了式子,但是搞了好久发现都控制不了精度,后来突然想到组合数可以用log优化,改了之后就AC了 比较水的概率题 #include #include #define maxn 200005 double f[2*maxn]; double c(int a,int b) { return f[a]-f[a-b]-f[b]; } int原创 2013-08-31 09:53:46 · 855 阅读 · 0 评论