zoukankan      html  css  js  c++  java
  • 置换群与轮换

    昨晚BestCoder第一题:

    一开始看了半天不知所云2333333

    其实它是让求置换群的轮换

    比如对于原题中的

    有o(1)=2, o(2)=5, o(3)=4, o(4)=3, o(5)=1

    其中o(1)=2,o(2)=5,o(5)=1就是一个轮换,转了一圈之后又回来了233

    同理,o(3)=4, o(4)=3又是一个轮换。

    所以输出答案为(1 2 5)(3 4)

    ---------------------------------------------------------------------------------

    挺水的一个水题,结果不知道为什么我的代码总是TLE   T^T

    终于知道为什么了T^T

    while (~scanf(......))

    注意加上那个~

    因为OJ上读入结束之后scanf返回值是-1(即二进制11111111),加个~就可以让循环结束了

    很隐蔽的bug......手测根本发现不了T^T

    附代码

     1 #include "stdio.h"
     2 int a[100010];
     3 int v[100010];
     4 int tx,ty,n,i;
     5 
     6 int main()
     7 {
     8     while (~scanf("%d
    ",&n))
     9     {
    10         for (i=1;i<=n;i++)
    11         {
    12             scanf("%d",&a[i]);
    13             v[i]=0;
    14         }
    15         for (i=1;i<=n;i++)
    16         {
    17             if (v[i]==0)
    18             {
    19                 printf("(%d",i);
    20                 v[i]=1;
    21                 tx=i;
    22                 ty=a[i];
    23                 while (v[ty]==0)
    24                 {
    25                     printf(" ");
    26                     v[ty]=1;
    27                     tx=ty;
    28                     ty=a[ty];
    29                     printf("%d",tx);
    30                 }
    31                 printf(")");
    32             }
    33         }
    34         printf("
    ");
    35     }
    36     return 0;
    37 }
    View Code

    Orz

  • 相关阅读:
    第五周作业
    第四周编程总结
    第六周作业
    2019春第五周作业
    2019年春季学期第四周作业
    2019年春季学期第三周作业
    求最大值及其下标
    7-1
    第十周课程总结
    第九周课程总结&实验报告(七)
  • 原文地址:https://www.cnblogs.com/pdev/p/3949443.html
Copyright © 2011-2022 走看看