C#C# ACM poj1007

來源:互聯網
上載者:User

標籤:

求逆序數,快排

  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;        }

 

C#C# ACM poj1007

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.