acm数学(待续)

意图写出http://www.cnblogs.com/kuangbin/archive/2012/08/28/2661066.html这个东西的完善版。

1.置换,置换的运算

poj 2369 Permutations置换群中有一个定理:设T为一置换,e为单位置换,T^k=e,那么k的最小正整数解是T的拆分的所有循环长度的最小公倍数。

 1 #include <cstdio>
 2 const int maxn = 1005;
 3 int gcd(int a,int b){return b == 0 ? a : gcd(b, a % b);}
 4 int lcm(int a,int b){return a / gcd(a, b) * b;}
 5
 6 int a[maxn];
 7
 8 int main()
 9 {
10     int n;
11     scanf("%d", &n);
12     for(int i = 1; i <= n; i++)
13     {
14         scanf("%d", &a[i]);
15     }
16     int ans = 1;
17     for(int i = 1; i <= n; i++)
18     {
19         int temp = a[i], len = 1;
20         while(temp != i)
21         {
22             len++;
23             temp = a[temp];
24         }
25         ans = lcm(ans, len);
26     }
27     printf("%d\n", ans);
28
29     return 0;
30 }

poj 1026 Cipher

PE真的巨坑,每个blocks结束之后要加一个换行,样例输出是有问题的。

注意一下,这个地方,和上一道比较,是一个倒过来的,倒过来的能明白吗。

 1 #include <cstdio>
 2 #include <cstring>
 3 const int maxn = 200 + 5;
 4 int gcd(int a,int b){return b == 0 ? a : gcd(b, a % b);}
 5 int lcm(int a,int b){return a / gcd(a, b) * b;}
 6
 7 int n,k,x;
 8 int a[maxn], round[maxn];
 9 char s[maxn], ss[maxn];
10 int main()
11 {
12     while(~scanf("%d", &n) && n)
13     {
14         for(int i = 1; i <= n; i++)
15             scanf("%d", &a[i]);
16         //找寻环节并记录。
17         for(int i = 1; i <= n; i++)
18         {
19             int temp = i, len = 0;
20             do
21             {
22                 temp = a[temp];
23                 len++;
24             }while(temp != i);
25             round[i] = len;
26         }
27
28
29         while(~scanf("%d", &k) && k)
30         {
31             getchar();
32             gets(s+1);
33             int slen = strlen(s+1);
34
35             while(slen <= n)
36             {
37                 s[++slen] = ‘ ‘;
38             }
39             s[n+1] = ‘\0‘;
40             strcpy(ss+1, s+1);
41             for(int i = 1; i <= n; i++)
42             {
43                 int t = round[i] - k % round[i];
44                 int temp = i;
45                 while(t--)
46                 {
47                     temp = a[temp];
48                 }
49                 ss[i] = s[temp];
50             }
51             printf("%s\n", ss + 1);
52         }
53         puts("");
54     }
55     return 0;
56 }
时间: 2024-12-25 13:31:41

acm数学(待续)的相关文章

ACM数学知识体系

#include<iostream> #include<string> #include<stack> using namespace std; #define n 8 stack <int *> s; int * createMaze(){//初始化迷宫 int i,j; int * a; a=new int[n*n]; for(i=0;i<n;i++){ for(j=0;j<n;j++){ *(a+n*i+j)=-1;//不设置为0的原因是超

ACM数学(转)

从放暑假前周sir给我讲了一个用polya计数法和burnside定理做的题目(pku2409)后,突然觉得组合数学挺有意思,然后从那时起到现在几乎都在做这类的题目. 做到现在感觉这类题目的一些基本知识点都差不多有所了解了,水题也刷了不少,但还有很多难题自己实在是做不动,所以准备把这类题目先放一放,然后把前段时间做的水题整理一下(供以后的初学者参考,大牛就不要看了哈,都是水题).剩下的比较难的题目就慢慢来吧,以后做出来再不上,这个小结会不断地更新.也希望大家有好的题目可以推荐一下,分享一下哈.

2046 ACM 数学

题目:http://acm.hdu.edu.cn/showproblem.php?pid=2046 思维:与之前有两道题目相似,n可以由n-1和n-2递推过来.f(n)=f(n-1)*1+f(n-2)*1. 也可以在草稿纸上直接画,寻找各项之间的规律.规律很明显. code: #include <iostream> using namespace std; int main() { int n; long long u[51]; while (cin >> n) { u[0] =

ACM 数学

欧几里得辗转相除法求最大公约数 int gcd(int a,int b) { if(b==0) return a; else return gcd(b,a%b); } 求组合数 int C(int n ,int m) { int i,a,fz=1,fm=1; for( i = 1; i <= m ;i++) { fz*=(n-i+1); fm*=i; a = gcd(fz,fm); fz/=a; fm/=a; } return fz/fm; } 错排公式 D(n) = (n-1) [D(n-2)

ACM/ICPC算法训练 之 数学很重要-浅谈“排列计数” (DP题-POJ1037)

这一题是最近在看Coursera的<算法与设计>的公开课时看到的一道较难的DP例题,之所以写下来,一方面是因为DP的状态我想了很久才想明白,所以借此记录,另一方面是看到这一题有运用到 排列计数 的方法,虽然排列计数的思路简单,但却是算法中一个数学优化的点睛之笔. Poj1037  A decorative fence 题意:有K组数据(1~100),每组数据给出总木棒数N(1~20)和一个排列数C(64位整型范围内),N个木棒长度各异,按照以下条件排列,并将所有可能结果进行字典序排序 1.每一

ACM/ICPC算法训练 之 数学问题

好歹我是数学专业的学生,还是要写写训练的时候遇到的数学问题滴~~ 在ACM集训的时候在各高校OJ上也遇见过挺多的数学问题,例如大数的处理,素数的各种算法,几何问题,函数问题(单调,周期等性质),甚至是各种数学定理或公式的变形.其实算法本身也属于数学研究的范畴(计算机本就是数学的衍生嘛),诸如众多排序算法,搜索算法也是许多精巧的数学逻辑思维,所以大家学计算机千万别忽视数学这门基础学科啊. 貌似说了好多废话= =||,待小编进入正题,今天在湖大OJ训练赛上看到一道数学题,话不多说,直接上图! ___

[2013山东ACM]省赛 The number of steps (可能DP,数学期望)

The number of steps nid=24#time" style="padding-bottom:0px; margin:0px; padding-left:0px; padding-right:0px; color:rgb(83,113,197); text-decoration:none; padding-top:0px"> Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 Mary

ACM学习历程—UESTC 1226 Huatuo&#39;s Medicine(数学)(2015CCPC L)

题目链接:http://acm.uestc.edu.cn/#/problem/show/1226 题目就是构造一个对称的串,除了中间的那个只有1个,其余的两边都是对称的两个,自然答案就是2*n-1. 代码: #include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <cstring> #include <algorithm> #

[2013山东ACM省赛] The number of steps (概率DP,数学期望)

The number of steps Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Mary stands in a strange maze, the maze looks like a triangle(the first layer have one room,the second layer have two rooms,the third layer have three rooms -). Now she st