杭电1106 我就是我 2022-09-11 10:22 84阅读 0赞 # # # 排序 # **Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 28373 Accepted Submission(s): 7854** Problem Description 输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。 你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。 Input 输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。 输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。 Output 对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。 Sample Input 0051231232050775 Sample Output 0 77 12312320 代码如下: #include <iostream> #include <string> #include <vector> using namespace std; int findSplit(vector<int>& arr, int p, int q) { int tmp = arr.at(p) ; while (p < q) { while(p < q && arr.at(q) >= tmp) -- q ; arr.at(p) = arr.at(q) ; while(p < q && arr.at(p) <= tmp) ++ p ; arr.at(q) = arr.at(p) ; } arr.at(p) = tmp ; return p ; } void quickSort(vector<int>& arr, int p, int q) { if (p < q) { int spIndex = findSplit(arr, p, q) ; quickSort(arr, p, spIndex - 1) ; quickSort(arr, spIndex + 1, q) ; } } void splitInt(string str, char spliter, vector<int>& ret) { ret.clear() ; const char* chs = str.c_str() ; int startIndex = 0 ; while (startIndex < str.length() && chs[startIndex] == spliter) startIndex ++ ; while(startIndex < str.length()) { int endIndex = startIndex ; while(endIndex < str.length() && chs[endIndex] != spliter) ++ endIndex ; char *tmpStr = new char[endIndex - startIndex + 1] ; memcpy(tmpStr, chs + startIndex, endIndex - startIndex) ; tmpStr[endIndex - startIndex] = '\0' ; ret.push_back(atoi(tmpStr)) ; delete[] tmpStr ; startIndex = endIndex + 1 ; while (startIndex < str.length() && chs[startIndex] == spliter) startIndex ++ ; } } int main(int argc, char** argv) { vector<int> testA ; string s ; while(cin >> s) { splitInt(s, '5', testA) ; quickSort(testA, 0, testA.size() - 1) ; for (int i = 0; i < testA.size() - 1; ++ i) cout << testA.at(i) << " " ; cout <<testA.at(testA.size() - 1) << endl; } return 0 ; }
相关 杭电oj基础题目(1106、1108、1163、1164、1170、1194、1197) 文章目录 1106、排序 1108、最小公倍数 1157、Who's in the middle 1163、Eddy 旧城等待,/ 2023年07月18日 09:09/ 0 赞/ 13 阅读
相关 杭电1061 Rightmost Digit Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J 布满荆棘的人生/ 2022年09月17日 05:27/ 0 赞/ 282 阅读
相关 杭电1106 排序 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other 我就是我/ 2022年09月11日 10:22/ 0 赞/ 85 阅读
相关 杭电1039 Easier Done Than Said? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 6553 一时失言乱红尘/ 2022年06月05日 12:48/ 0 赞/ 287 阅读
相关 杭电1026 Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 6553 快来打我*/ 2022年06月04日 05:53/ 0 赞/ 306 阅读
相关 杭电oj Problem Title 1 Pro. ID 1000 A+B Problem include<stdio.h> int main() { £神魔★判官ぃ/ 2022年05月15日 16:14/ 0 赞/ 334 阅读
相关 杭电1060 此题是一道数学题,也是一道技巧题,也是不能直接算的,否则会超时的!!! 此题思路: 设n^n=d.xxxx\10^(k-1),其中k表示n^n的位数; d.xxxx 痛定思痛。/ 2021年12月01日 22:40/ 0 赞/ 326 阅读
相关 杭电2075 此题真的是简单的再不能简单了!呵呵!我一直纠结,出这样的题是什么意思呢?不懂!哎,不说那些废话了,直接 ac吧!呵呵! \include<iostream> using 今天药忘吃喽~/ 2021年12月01日 22:38/ 0 赞/ 311 阅读
相关 杭电2078 说实话,此题是一道有严重bug的问题,对于xhd没晚能复习的科目数m根本就没用上!!!哎不管那么些了,反正ac了!呵呵!此题这样想xhd得复习效率是前一课程和后一课程复习效率差 ╰+攻爆jí腚メ/ 2021年12月01日 22:38/ 0 赞/ 355 阅读
相关 杭电2090 此题就是一道令人无法琢磨的题!哎!!我简直就无语了!!呵呵!竟然能出这题。。。。 废话少说,直接ac!!! \\\ 此题要想输出结果,还需要注意一下! 在linux 约定不等于承诺〃/ 2021年12月01日 21:12/ 0 赞/ 369 阅读
还没有评论,来说两句吧...