Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
一次AC, Java 代码 晒晒import java.util.Scanner; public class Main { static int[] record = new int[4]; static String[] output = null; static int[] idxes = null; static String[] tmpStrings = null; static int[] tmpInt = null; static int i1, j1; public static void main(String[] args) { Scanner cin = new Scanner(System.in); try { // Scanner cin = new Scanner(new File("C:\\input.txt")); int a = cin.nextInt(); int b = cin.nextInt(); output = new String[b]; idxes = new int[b]; tmpStrings = new String[b]; tmpInt = new int[b]; int idx = 0; String curLine = cin.nextLine(); int curOrdernum; while (cin.hasNext()) { curLine = cin.nextLine(); initialize(curLine); curOrdernum = getOrderNum(curLine); output[idx] = curLine; idxes[idx] = curOrdernum; idx++; } mergeSort(0, output.length - 1); for (int i = 0; i < output.length; i++) { System.out.println(output[i]); } } catch (Exception e) { // TODO: handle exception } } static void mergeSort(int low, int hi) { if (low < hi) { int mid = low + (hi - low) / 2; mergeSort(low, mid); mergeSort(mid + 1, hi); merge(low, mid, hi); } } static void merge(int low, int mid, int hi) { for (int i = low; i <= hi; i++) { tmpStrings[i] = output[i]; tmpInt[i] = idxes[i]; } i1 = low; j1 = mid + 1; for (int k = low; k <= hi; k++) { if (i1 > mid) { output[k] = tmpStrings[j1]; idxes[k] = tmpInt[j1++]; } else if (j1 > hi) { output[k] = tmpStrings[i1]; idxes[k] = tmpInt[i1++]; } else if (tmpInt[i1] <= tmpInt[j1]) { output[k] = tmpStrings[i1]; idxes[k] = tmpInt[i1++]; } else { output[k] = tmpStrings[j1]; idxes[k] = tmpInt[j1++]; } } } static void initialize(String curLine) { for (int i = 0; i < record.length; i++) { record[i] = 0; } for (int i = 0; i < curLine.length(); i++) { char curChar = curLine.charAt(i); record[getCharidx(curChar)]++; } } static int getCharidx(char c) { switch (c) { case 'A': return 0; case 'C': return 1; case 'G': return 2; case 'T': return 3; default: return -1; } } static int getOrderNum(String curLine) { int retval = 0; int idx = 0; for (int i = 0; i < curLine.length(); i++) { idx = getCharidx(curLine.charAt(i)); record[idx]--; idx--; while (idx >= 0) { retval += record[idx--]; } } return retval; } } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator