1. 程式人生 > >用佇列對撲克牌排序 -優先佇列法

用佇列對撲克牌排序 -優先佇列法

#include <iostream>
#include <queue>
#include<cstdio>
#include<stdlib.h>
using namespace std;
struct Node{
    char x;
    char y;
    int i;
    Node( int a= 0, int b= 0,int c=0 ):
        x(a), y(b),i(c) {};
};

bool operator<( Node a, Node b ){

    return  a.i>b.i;
}
char s[2],s1,s2;
char ans[10010];
priority_queue<Node> q[13];
int main(){
//freopen("2.out","w",stdout);
int i,j,flag,n;
char l;
cin>>n;
    for(i= 0; i< n; ++i )
    {
        scanf("%s",s);
        s1=s[0],s2=s[1];
        q[s2-'0'-1].push(Node(s1,s2,i));
    }
    j=0;
    for(i=0;i<9;i++)
    {
        flag=0;
        cout<<"Queue"<<i+1<<":";
        while( !q[i].empty() ){
            if(!flag)
            {
                cout << q[i].top().x<< q[i].top().y ;
                flag=1;
            }
            else
                cout <<" "<<q[i].top().x<< q[i].top().y ;
            s1=q[i].top().x;s2=q[i].top().y;
            q[s1-'A'+9].push(Node(s2,s1,j));
            q[i].pop();
            j++;
        }
         cout<<endl;
    }
    j=0;
    for(;i<13;i++)
    {
        flag=0;
        l='A'+i-9;
        cout<<"Queue"<<l<<":";
        while(!q[i].empty())
        {
            if(!flag)
            {
                cout << q[i].top().y<< q[i].top().x;
                flag=1;
            }
            else
                cout <<" "<<q[i].top().y<< q[i].top().x;
            s1=q[i].top().y;s2=q[i].top().x;
            ans[j++]=s1;ans[j++]=s2;
            q[i].pop();
        }
        cout<<endl;
    }
    for(i=0;i<j;i+=2)
    {
        if(i==0)
            cout<<ans[i]<<ans[i+1];
        else
            cout<<" "<<ans[i]<<ans[i+1];
    }
    cout<<endl;
    return 0;
}


相關推薦

佇列撲克牌排序 -優先佇列

#include <iostream> #include <queue> #include<cstdio> #include<stdlib.h> using namespace std; struct Node{ char x; char y;

sortvector中pair排序+優先佇列排序

//對vector中的 pair排序 vector<pair<int,char>>V; bool cmp(const pair<int,char> a, cons

南陽oj-------一種排序(優先佇列)

                                                                      一種排序                          

hdu1285確定比賽名次(拓撲排序+優先佇列)

傳送門 第一道拓撲排序題 每次刪除入度為0的點,並輸出 這題要求隊名小的排前面,所以要用到過載的優先佇列 1 #include<bits/stdc++.h> 2 using namespace std; 3 priority_queue<int,vec

hdu 4857 逃生(反向拓撲排序+優先佇列

逃生 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7786  

Running Median POJ - 3784 (頂堆/優先佇列

For this problem, you will write a program that reads in a sequence of 32-bit signed integers. After each odd-indexed value is read, output the median (m

Minimal Labels CodeForces - 825E (反向拓撲排序+優先佇列)

傳送門 題意:有一個有向無環圖,然後要給每個結點附上標籤,如果從v到u有一條邊,那麼v的標籤小於u的標籤,那麼v的標籤要小於u的標籤,最後使得從頂點1到頂點n的字典序最小,輸出這個字典序 題解:這題一眼看上去用拓撲排序,然後拍了個正向拓撲排序+每次找出最小的進入佇列中進行查詢,wa6,仔細分

演算法 —— 排序 —— 優先佇列

優先佇列 【Priority Queue】 首先宣告一下,優先佇列是基於堆的完全二叉樹,它和佇列的概念無關。(它並不是佇列,而是樹) 並且,優先佇列最重要的操作就是: 刪除最大元素和插入元素,所以我們把精力集中在這兩點上。(本文以最大堆為主講述)

hdoj 4857 逃生(逆向拓撲排序+優先佇列)

逃生 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2161    Accepted Submissio

《演算法(第四版)》排序-----優先佇列

  在實際應用中,我們常常不一定要求整個陣列全部有序,或者不需要一次就將它們排序,可能只需要當前陣列的鍵值最大的元素或最小的元素,這時就類似於總在處理下一個優先順序最高的元素,在這種情況下一個合適的資料結構應該支援兩種操作:刪除最大元素和插入元素。這種型別叫做優先佇列 實

HDU 4857 逃生 (反向拓撲排序+優先佇列

逃生 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis

堆 堆排序 優先佇列 圖文詳解(Golang實現)

引入 在實際應用中,我們經常需要從一組物件中查詢最大值或最小值。當然我們可以每次都先排序,然後再進行查詢,但是這種做法效率很低。哪麼有沒有一種特殊的資料結構,可以高效率的實現我們的需求呢,答案就是堆(heap) 堆分為最小堆和最大堆,它們的性質相似,我們以最小堆為例子。 最小堆 舉例 如上圖所示,就為一個

HashMap與HashCode有關,Sort排序

ati 排序 spa main i++ map nbsp col static 遍歷Map,使用keySet()可以返回set值,用keySet()得到key值,使用叠代器遍歷,然後使用put()得到value值。 上面這個算法的關鍵語句: Set s=m.keySet

TreeMapkey排序

//按年份,取出最近10項         List<StatisticalData> projectYear = statisticalInfo.getProjectYear();         Map<String,String> treeMap

linq陣列排序及簡單運算

// 初始陣列 int[] arr = { 8, 10, 5, 6, 45, 676, 20, 35 }; // 對其按升序排序

.Kruskal演算法 優先佇列+並查集,優先佇列代替排序

程式碼 /* 思路,將邊集加入到最小優先佇列,每次取出一個最小邊,如果邊的兩個端點有一個沒有訪問過,說明加入這條邊,就沒有構成環。可以加入。 突然發現這個思路是錯的。判斷是不是環,我的說法是錯誤的。還沒有想到解決辦法。 如果解決了:加入一條邊

優先佇列或堆及堆排序介紹

1 堆的基本概念 堆也叫優先佇列,堆是一種特殊的完全二叉樹資料結構,堆分為兩種,最大堆,最小堆。 最大堆:根節點大於左右兩個子節點的完全二叉樹 最小堆:根節點小於左右兩個子節點的完全二叉樹 堆可以用陣列來儲存,a[i]處存根節點,a[2*i] a[2*i + 1]分別存左子樹的

leetcode692+出現次數做多的K單詞,優先佇列,注意重寫排序語法

https://leetcode.com/problems/top-k-frequent-words/description/ struct cmp{ bool operator()(pair<int,string>a, pair<int, string>b)

演算法-優先佇列與堆排序

優先佇列 許多應用程式都需要處理有序的元素,但不一定要求他們全部有序,或是不一定要一次就將他們排序。很多情況下我們會收集一些元素,處理當前鍵值最大的元素,然後再收集更多元素,再處理當前鍵值最大的元素,如此這般。 在這種情況下,一個合適的資料結構應該支援兩種操作:刪除最大元素和插入元素。

【51Nod - 1163】最高的獎勵 (貪心+優先佇列 或 妙並查集)

題幹: 有N個任務,每個任務有一個最晚結束時間以及一個對應的獎勵。在結束時間之前完成該任務,就可以獲得對應的獎勵。完成每一個任務所需的時間都是1個單位時間。有時候完成所有任務是不可能的,因為時間上可能會有衝突,這需要你來取捨。求能夠獲得的最高獎勵。 Input 第1行:一個數N,表示