admin 管理员组文章数量: 1087652
小米OJ 给小学生排队(采用Java实现)
思路是先按H降序排列(H相同时K值小的优先),然后用判断遍历数组,若当前数组下标减去K值大于0,则向前移动(下标-K)位....(表述不清楚)....
import java.util.*;public class Main {public static void main(String args[]) {Scanner scan = new Scanner(System.in);String line;while (scan.hasNextLine()) {line = scan.nextLine().trim();// please write your code hereString[] s = line.split(" ");int len = s.length;int n = Integer.parseInt(s[0]);int m[][] = new int[len][2];int result[][] = new int[len][2];//将值存入二维数组for(int i = 0; i < n; i++) {m[i][0] = Integer.parseInt(s[2*i+1]);m[i][1] = Integer.parseInt(s[2*i+2]);}//将二维数组按第一列降序排列Main mm = new Main();mm.insertSort(m,n);for(int i = 0; i < n; i++) {int l = i;int j = i - m[i][1];//System.out.println(""+j);if(j > 0) {for(int k = j; k > 0; k--) {result[l][0] = result[l-1][0];result[l][1] = result[l-1][1];l--;}result[i-j][0] = m[i][0];result[i-j][1] = m[i][1];}else {result[i][0] = m[i][0];result[i][1] = m[i][1];}}for(int i = 0; i < n - 1; i++) {System.out.print(result[i][0]+" "+result[i][1]+" ");}System.out.print(result[n-1][0]+" "+result[n-1][1]);}}//直接排序算法public void insertSort(int[][] data, int len) {int tmp1, tmp2;for(int i = 1; i < len; i++) {tmp1 = data[i][0];tmp2 = data[i][1];int j;for(j = i-1;j >= 0; j--) {if(data[j][0] < tmp1) {data[j+1][0] = data[j][0];data[j+1][1] = data[j][1];}else if(data[j][0] == tmp1 && data[j][1] > tmp2) {data[j+1][0] = data[j][0];data[j+1][1] = data[j][1];}else {break;}}data[j+1][0] = tmp1;data[j+1][1] = tmp2;}}
}
本文标签: 小米OJ 给小学生排队(采用Java实现)
版权声明:本文标题:小米OJ 给小学生排队(采用Java实现) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1700324333a397166.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论