zoukankan      html  css  js  c++  java
  • poj 1721

    关于置换群的应用。

    之前的单纯置换的题目做多了,加上读题目没有读懂,思维惯性就来了,导致弄了好久。后面直接搜的题解。

    参考:http://www.cnblogs.com/kuangbin/archive/2012/09/04/2670500.html

    题目大意:给n站牌,S次洗牌,要求得出洗牌后每个位置所在的答案。a[a[i]];

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstring>
     4 using namespace std;
     5 const int maxn=1006;
     6 int a[maxn],b[maxn],c[maxn];
     7 int n,m;
     8 int solve()
     9 {
    10     int j;
    11     int cnt=0;
    12     while(1){
    13         for(int i=1;i<=n;i++)
    14             b[i]=c[c[i]];
    15         cnt++;
    16         for(j=1;j<=n;j++)
    17             if(b[j]!=a[j])
    18                 break;
    19         if(j>n)
    20             break;
    21         for(int i=1;i<=n;i++)
    22             c[i]=b[i];
    23     }
    24 
    25     return cnt;
    26 }
    27 
    28 int main()
    29 {
    30     ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    31     while( cin >> n >> m){
    32         for(int i=1;i<=n;i++){
    33             cin >> a[i];
    34             c[i]=b[i]=a[i];
    35         }
    36 
    37         int cnt=solve(); ///计算循环的次数,最少需要多少次
    38         m=cnt-m%cnt; ///优化的核心
    39         while(m--){
    40             for(int i=1;i<=n;i++)
    41                 b[i]=a[a[i]];
    42             for(int i=1;i<=n;i++)
    43                 a[i]=b[i];
    44         }///直接暴力
    45         for(int i=1;i<=n;i++)
    46             cout << b[i] <<endl;
    47     }
    48 
    49     return 0;
    50 }

    思维惯性真的是要不得qwq。

  • 相关阅读:
    脚本编辑器的写法
    图集优化
    数组与链表的区别
    第四课 vi编辑器使用
    第三课下 Linux termina命令行常用快捷键
    第三课上 Linux命令入门
    01.Volatile相关知识
    第二课 Ubuntu环境搭建和图形界面操作
    第一课 不要用老方法学习单片机和ARM
    第八讲 IPC之信号量Semaphore
  • 原文地址:https://www.cnblogs.com/ZQUACM-875180305/p/9053454.html
Copyright © 2011-2022 走看看