69 条题解
-
0subrays LV 5 @ 2007-07-03 12:58:42
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 351ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:351ms最后一个点如何0ms??
-
02006-09-01 20:08:52@
这个运算满足结合律。因此可以用类似O(logn)的计算数的n次幂的算法来运算。
-
02006-03-28 12:30:16@
先将k转为m进制的数 然后构造一个与每一位m进制数相对应的结果的表 再通过叠加就可以得到解
由于不会什么群论 矩阵 这个方法倒还是可以 -
02006-01-27 11:40:08@
似乎矩阵快速求幂要比用置换群快...
不过 其实 置换群似乎也有N次幂的阿...
-
02006-01-22 16:20:00@
根据数据特点,可以采用矩阵乘法解决(当然用群论知识求出环也可)。
-
-12017-11-18 21:28:15@
哈哈哈,水好喝
#include <iostream> #include<cstdlib> #include<cstdio> #include<map> #include<vector> #include<cstring> #include<algorithm> #define FOR(i,x,y) for(i=x;i<=y;++i) #define maxa 1000 using namespace std; int a[10][100]; int p[100],n,q[100]; bool check() { int i; FOR(i,0,n-1) { if(p[i]!=i+1) return false; } return true; } int main() { int m,k; int i,j,t; cin>>n>>m>>k; FOR(i,0,m-1) FOR(j,0,n-1) { cin>>a[i][j]; } FOR(i,0,n-1) p[i] =i+1; int flag = 0; T:FOR(t,0,k-1) { FOR(i,0,n-1){ // cout<<t<<" "<<m<<" "<<i<<endl; q[i] = p[a[t%m][i]-1]; //cout<<q[i]<<endl; } FOR(i,0,n-1){ p[i] = q[i]; //cout<<p[i]<<" "; } //cout<<endl; //cout<<endl; if(check()&&t%m==(m-1)){ flag = 1; break; } } if(flag) { k = k%(t+1); flag =0; goto T; } FOR(i,0,n-1) cout<<p[i]<<" "; return 0; }
-
-12017-08-09 12:00:40@
矩阵乘法
-
-12013-02-16 10:16:52@
-
-12009-09-23 22:01:25@
找周期T,然后再做p%T