【BestCoder Round #93】HDU6019 MG loves gold

MG loves gold

 
 Accepts: 451
 
 Submissions: 1382
 Time Limit: 3000/1500 MS (Java/Others)
 
 Memory Limit: 262144/262144 K (Java/Others)
問題描述
MGMG是一個運氣爆表的男孩子,他總能從地下挖掘出埋藏着的金克拉。
地下的金克拉寶藏可以看成nn個元素組成的序列,每一種金克拉擁有自己的顏色CCMGMG每次可以用掉一把鏟子挖走連續一段,但是他不願意使用同一把鏟子挖到同一種顏色的金克拉。
MGMG作爲一個十分貪心的人,他希望可以用最少的鏟子挖走所有的金克拉。
我們規定,某一位置的土地只能被鏟子挖掘一次。

MGMG認爲這件事非常容易,不屑於用計算機解決,於是運用他高超的人類智慧開始進行計算。作爲一名旁觀者,你也想挑戰MGMG智慧,請你寫個程序,計算答案。
輸入描述
第一行一個整數TT,代表數據組數(1 <=T<=101<=T<=10)。
接下來,對於每組數據——
第一行一個整數nn,表示金克拉序列長度(1<=n<=1000001<=n<=100000)。
接下來一行nn個整數CC,表示金克拉顏色(|C|<=2000000000C<=2000000000)。
輸出描述
對於每一組數據,輸出一行。
該行有一個整數,表示MGMG最少使用幾把鏟子。
輸入樣例
2
5
1 1 2 3 -1
5
1 1 2 2 3
輸出樣例
2
3
#include <iostream>
#include<cstdio>
#include<set>
using namespace std;
set<int> s;/*set集合容器:實現了紅黑樹的平衡二叉檢索樹的數據結構,
插入元素時,它會自動調整二叉樹的排列,把元素放到適當的位置,以保
證每個子樹根節點鍵值大於左子樹所有節點的鍵值,小於右子樹所有節點
的鍵值;另外,還得保證根節點左子樹的高度與右子樹高度相等。*/


int main()
{
    int T;
    int f[100005];
    scanf("%d",&T);
    while(T--){
        int ans=1;
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%d",&f[i]);
    s.clear();
    for(int i=0;i<n;i++){
        if(s.count(f[i])){//返回s中的a[i]的個數
            s.clear();
            ans++;
        }
        s.insert(f[i]);
    }


    printf("%d\n",ans);
    }


    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章