zoukankan      html  css  js  c++  java
  • C# ACM poj1007

    求逆序数,快排

      public static void acm1007(int a, string[] c)
            {
                Dictionary<int, string> dic = new Dictionary<int, string>();
                int[] i = new int[a];
                var j = 0;
                foreach (var item in c)
                {
                    int k = Acm1007Unit(item);
                    if (!dic.ContainsKey(k))
                    {
                        i[j] = k;
                        j++;
                        dic.Add(k, item + ",");
                    }
                    else
                    {
                        dic[k] += item + ",";
                        i[j] = -1;
                        j++;
                    }
                }
                 QSortDIY(i, 0, i.Length - 1);
    
                for (int jjj = 0; jjj < i.Length ; jjj++)
                {
                    if (i[jjj] != -1)
                    {
                        Console.Write(dic[i[jjj]]);
                    }
                }
    
            }
            public static int Acm1007Unit(string a)
            {
                int anum = 0;
                int cnum = 0;
                int gnum = 0;
    
                int r = 0;
                for (int i = a.Length - 1; i >= 0; i--)
                {
                    switch (a[i])
                    {
                        case 'A':
                            anum++;
                            break;
                        case 'C':
                            r += anum;
                            cnum++;
                            break;
                        case 'G':
                            r += anum + cnum;
                            gnum++;
                            break;
                        case 'T':
                            r += anum + cnum + gnum;
                            break;
                    }
                }
                return r;
            }
            public static void QSortDIY(int[] array, int low, int high)
            {
                if (low >= high)
                {
                    return;
                }
                int ie = QSortUnit(array, low, high);
                QSortDIY(array, low, ie - 1);
                QSortDIY(array, ie + 1, high);
            }
            private static int QSortUnit(int[] array, int low, int high)
            {
                int key = array[low];
                while (low < high)
                {
                    while (array[high] >= key && high > low)
                    {
                        --high;
                    }
                    array[low] = array[high];
                    while (array[low] <= key && high > low)
                    {
    
                        ++low;
                    }
                    array[high] = array[low];
                }
                array[low] = key;
                return high;
            }
  • 相关阅读:
    概念理解及常用方法
    WeX5触发事件
    前端页面问题小结
    高性能 CSS3 动画
    IScroll5中文API整理,用法与参考
    关于浏览器兼容之mate标签
    HTMl5的sessionStorage和localStorage
    web app iphone4 iphone5 iphone6 响应式布局 适配代码
    Javascript模板引擎分享
    css3 media媒体查询器用法总结
  • 原文地址:https://www.cnblogs.com/DhyDream/p/4349436.html
Copyright © 2011-2022 走看看