POJ 排序 单向队列的应用
2017-08-17 16:57
211 查看
排序
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 6 Accepted Submission(s) : 2
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。
你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。
Input
输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
Output
对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
Sample Input
0051231232050775
Sample Output
0 77 12312320
Source
POJ
思路:
字符串输入时可能会有开头有5,结尾有5,中间多个5的情况,对于中间多个5的情况我们在输入的时候就可以判断,若a[i]==’5’&&a[i-1]==’5’则不将a[i]压入队尾,这样操作可以将中间出现多个5在入队时只压入一个。判断队头,若队头有5,直接将5弹出,否则就将弹出的数符转换为数字以long long 型存在b[k]中,遇到中间的5,k+1,这样就直接得到了需要排列的数。判断队尾,若队尾没有5,就在队尾压入一个5。这样做的原因是我们前面遇5 k+1这个操作造成的必然操作。否则最后一个数字无法存入b[k]中。
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 6 Accepted Submission(s) : 2
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。
你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。
Input
输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。
输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。
Output
对于每个测试用例,输出分割得到的整数排序的结果,相邻的两个整数之间用一个空格分开,每组输出占一行。
Sample Input
0051231232050775
Sample Output
0 77 12312320
Source
POJ
思路:
字符串输入时可能会有开头有5,结尾有5,中间多个5的情况,对于中间多个5的情况我们在输入的时候就可以判断,若a[i]==’5’&&a[i-1]==’5’则不将a[i]压入队尾,这样操作可以将中间出现多个5在入队时只压入一个。判断队头,若队头有5,直接将5弹出,否则就将弹出的数符转换为数字以long long 型存在b[k]中,遇到中间的5,k+1,这样就直接得到了需要排列的数。判断队尾,若队尾没有5,就在队尾压入一个5。这样做的原因是我们前面遇5 k+1这个操作造成的必然操作。否则最后一个数字无法存入b[k]中。
#include<iostream> #include<algorithm> #include<cstring> #include<queue> using namespace std; int main() { char a[1005]; while(cin>>a) { queue<int> aa;int k=0; long long b[1005]={0}; int m=strlen(a); for(int i=0;i<m;i++) { if(a[i]=='5'&&a[i-1]=='5') //中间出现多个5只压入1个5 continue; 9c4a aa.push(a[i]-'0'); //将数符转化为int 型数字压入队尾 } if(a[m-1]!='5') //字符串不以5结尾,再压入一个5,使最后一个数字存入b[k] aa.push(5); if(aa.front()==5) //队头是5,弹出 aa.pop(); while(!aa.empty()) { if(aa.front()==5) //数字存入b[k],遇到5,开始将数字存入b[k+1]中 { k++; } else { b[k]=b[k]*10+aa.front(); //b[k]存的数就是需要排序的数 } aa.pop(); } sort(b,b+k); for(int i=0;i<k-1;i++) //输出BT,最后一个数字后面不能加空格键,所以FOR循环只能到k-1 cout<<b[i]<<" "; cout<<b[k-1]; cout<<endl; } }
相关文章推荐
- (队列的应用5.3.2)POJ 2259 Team Queue(队列数组的使用)
- 双向链表小练习-》拿单向链表改的,其中增加了一个链表排序的小应用
- C++队列和优先权队列的使用---应用:带时限作业排序
- Sliding Window poj 单调队列的简单应用
- (Relax ST1.22)POJ 3664 Election Time(两次排序的巧妙应用)
- 设头指针的循环单向队列及其约瑟夫环应用
- POJ 1442 堆的应用 优先队列
- Poj 3253 Fence Repair (贪心加优先队列的应用)
- 堆排序的应用之优先级队列的实现
- 优先级队列的应用 之对扑克牌排序
- POJ 3253 Fence Repair 堆的应用,优先队列
- POJ 1696 Space Ant (极角排序的应用)
- 堆排序的应用-优先级队列
- (POJ 2259) Team Queue 队列的应用 (队列的队列)
- 堆排序应用之优先队列的实现
- (队列的应用5.3.3)POJ 3125 Printer Queue(优先队列的使用)
- (队列的应用5.3.3)POJ 3125 Printer Queue(优先队列的使用)
- POJ 3984 静态数组队列学习应用
- 堆及堆的应用/单调队列/堆排序
- 栈的应用——对栈排序、用栈实现队列的功能