输入包含多组数据。
每一组数据一行,包含24个整数,分别代表00:00、01:00、……、23:00,这24个时间点的股票变化幅度。每个整数之间用一个空格隔开。
对应每一组数据,按问题描述的规则以一定顺序输出一行0、1、……、23,这24个时间。整数之间用空格隔开。
如果有两个时刻涨跌幅度相同,则按照时间先后顺序输出。
-11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
23 0 22 1 21 2 20 3 19 4 18 5 17 6 16 7 15 8 14 9 13 10 12 11 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
思想很简单,无非利用map进行键值的递减排序,如果值一样就按照键的升序排序,然后要吐槽 下牛客的OJ,mdzz!!!我本来直接输出一个时间,输出空格,然后一直提醒我空格格式不对, 我快疯了,然后发现,在最后一个时间输出时不能加空格,mdzz!所以加了如下代码 if(i < list.size() - 1) System.out.print(" "); import java.util.*; public class Main{ public static void main(String[] args){ Scanner in = new Scanner(System.in); while(in.hasNext()){ Map<Integer, Integer> stock = new HashMap(); for(int i = 0; i < 24; i++) stock.put(i, Math.abs(in.nextInt())); List<Map.Entry<Integer, Integer>> list = new ArrayList<Map.Entry<Integer, Integer>>(stock.entrySet()); Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>(){ //降序排序 public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer,Integer> o2) { int m = o2.getValue().compareTo(o1.getValue()); int n = m == 0 ? o1.getKey() - o2.getKey() : m; return n; } }); for(int i = 0; i < list.size(); i++){ System.out.print(list.get(i).getKey()); if(i < list.size() - 1) System.out.print(" "); } System.out.println(); } } }
#include<iostream> #include<vector> #include<string> #include<algorithm> #include<functional> #include <map> #include <set> #include <unordered_set> #include <unordered_map> #include <exception> #include <iomanip> #include <memory> #include <sstream> #define INF 1000000 using namespace std; int main(int argc, char** argv) { //freopen("in.txt", "r", stdin); int change; while (cin >> change) { vector<pair<int, int>> hours; hours.reserve(24); hours.emplace_back(abs(change), 0); for (int i = 1; i <= 23; ++i) { cin >> change; hours.emplace_back(abs(change), i); } sort(hours.begin(),hours.end(), [](const pair<int,int>& pr1, const pair<int,int>& pr2) { return pr1.first > pr2.first || pr1.first == pr2.first && pr1.second < pr2.second; }); for (int i = 0; i <= 22; ++i) cout << hours[i].second << " "; cout << hours[23].second << endl; } return 0; }
import java.util.*; public class Main{ public static void main(String[] args){ Scanner scanner=new Scanner(System.in); while(scanner.hasNext()){ boolean[] flag=new boolean[24]; int[] price=new int[24]; for(int i=0;i<24;i++){ price[i]=scanner.nextInt(); flag[i]=true; } for(int i=0;i<24;i++){ int max=-1; int index=-1; for(int j=0;j<24;j++){ if(Math.abs(price[j])>max && flag[j]){ index=j; max=Math.abs(price[j]); } } flag[index]=false; System.out.print(index+" "); } System.out.println(); } } }
// write your code here cpp #include<bits/stdc++.h> using namespace std; bool cmp(pair<int, int> a, pair<int, int> b) { if (abs(a.first) > abs(b.first)) return true; else if (abs(a.first) == abs(b.first)) return a.second < b.second; else return false; } int main() { pair<int, int> arr[24]; while (cin >> arr[0].first) { arr[0].second = 0; for (int i = 1; i < 24; ++i) { cin >> arr[i].first; arr[i].second = i; } sort(arr, arr + 24, cmp); for (int i = 0; i < 24; ++i) cout << arr[i].second << ' '; cout << endl; } return 0; }
#include <iostream> #include <cmath> #include <vector> #include <algorithm> using namespace std; struct shares { int ext; int times; }; bool cmp(const shares&a1,const shares&a2 ) { if(a1.ext!=a2.ext) return a1.ext>a2.ext; else return a1.times<a2.times; } int main() { int num; while(cin>>num) { vector<shares> day(24); day[0].ext=abs(num); day[0].times=0; for(int i=1;i<24;i++) { cin>>num; if(num<0) num=-num; day[i].ext=num; day[i].times=i; } sort(day.begin(),day.end(),cmp); for(int i=0;i<23;++i) { cout<<day[i].times<<" "; } cout<<day[23].times<<endl; } return 0; }
#include <iostream> #include<vector> #include<algorithm> #include<map> using namespace std; typedef struct { vector<int> time; void sorttime() { sort(time.begin(), time.end()); } }node; int main() { int num; while (cin >> num) { map<int, node> data; if (num < 0) num = 0 - num; data[num].time.push_back(0); for (int i = 1; i < 24; i++) { cin >> num; if (num < 0) num = 0 - num; data[num].time.push_back(i); } int cnt = 0; for (map<int, node>::reverse_iterator it = data.rbegin(); it != data.rend(); it++) { it->second.sorttime(); for (vector<int>::iterator k = it->second.time.begin(); k != it->second.time.end(); k++) { cout << *k; cnt++; if (cnt == 24) { cout << endl; break; } else cout << " "; } } } return 0; }
#include <iostream> #include <algorithm> #include <vector> using namespace std; struct info { int delta, time; }; vector<info> solve(vector<int> & A) { vector<info> list(24); for (int i = 0; i < 24; ++i) { list[i].delta = abs(A[i]); list[i].time = i; } info temp; for (int i = 1; i < 24; i++) { temp = list[i]; int j; for (j = i; j > 0 && list[j - 1].delta < temp.delta; --j) { list[j] = list[j - 1]; } list[j] = temp; } return list; } int main() { int n; while (cin >> n && n) { vector<int> delta(24, n); vector<info> list; for (int i = 1; i < 24; ++i) cin >> delta[i]; list = solve(delta); for (int i = 0; i < 24; ++i) cout << (i ? " " : "") << list[i].time; cout << endl; } return 0; }