1. 程式人生 > >【HUOJ】排序(queue 優先隊列)

【HUOJ】排序(queue 優先隊列)

rsquo ace targe end vector std its AC ring

排序

題意:輸入一行數字,如果我們把這行數字中的‘5’都看成空格,那麽就得到一行用空格分割的若幹非負整數(可能有些整數以‘0’開頭,這些頭部的‘0’應該被忽略掉,除非這個整數就是由若幹個‘0’組成的,這時這個整數就是0)。

你的任務是:對這些分割得到的整數,依從小到大的順序排序輸出。

思路:我先用string a輸入,然後每一個ai判斷是不是5,如果不是5就放進一個隊列裏,如果是5就進行一波判斷

另外,我WA了一個地方是輸入520這種數,我會輸出0 20,然後改了一波23333~

先放上我的代碼:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
int main()
{

    string a;
    queue<char>q;
    while(cin>>a)
    {
        int x;
        priority_queue <int,vector<int>,greater<int> >p;
        //queue<int>p;
int l=a.length(); for(int i=0; i<l; i++) { if(a[i]!=5) { q.push(a[i]); } if(a[i]==5||i==l-1) { x=0; int flag=0; if(q.empty()) continue;
while(!q.empty()) { if(q.front()==0&&flag==0) { q.pop(); } else { flag=1; x=x*10+(q.front()-0); q.pop(); } } if(flag==0) p.push(0); else p.push(x); } } cout<<p.top(); p.pop(); while(!p.empty()) { cout<<" "<<p.top(); p.pop(); } cout<<endl; } return 0; }

做題用時:31分鐘

整理博客:7分鐘

【HUOJ】排序(queue 優先隊列)