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)
問題描述
$MG$是一個運氣爆表的男孩子,他總能從地下挖掘出埋藏着的金克拉。
地下的金克拉寶藏可以看成$n$個元素組成的序列,每一種金克拉擁有自己的顏色$C$。
$MG$每次可以用掉一把鏟子挖走連續一段,但是他不願意使用同一把鏟子挖到同一種顏色的金克拉。
$MG$作爲一個十分貪心的人,他希望可以用最少的鏟子挖走所有的金克拉。
我們規定,某一位置的土地只能被鏟子挖掘一次。

$MG$認爲這件事非常容易,不屑於用計算機解決,於是運用他高超的人類智慧開始進行計算。作爲一名旁觀者,你也想挑戰$MG$智慧,請你寫個程序,計算答案。
輸入描述
第一行一個整數$T$,代表數據組數($1 <=T<=10$)。
接下來,對於每組數據——
第一行一個整數$n$,表示金克拉序列長度($1<=n<=100000$)。
接下來一行$n$個整數$C$,表示金克拉顏色($|C|<=2000000000$)。
輸出描述
對於每一組數據,輸出一行。
該行有一個整數,表示$MG$最少使用幾把鏟子。
輸入樣例
2
5
1 1 2 3 -1
5
1 1 2 2 3
輸出樣例
2
3
http://acm.hdu.edu.cn/showproblem.php?pid=6019

10萬的數據      STL操作 還有就是線性的 一遍過去 每個數字被 標記一次 清空一次(記錄起點好清空);

#include<bits/stdc++.h>
using namespace std;

set<int>ss;

int main()
{  int t,n,i,xf,sum;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        ss.clear();
        sum=0;
        for(i=0;i<n;i++)
        {
            scanf("%d",&xf);
            if(i==0||ss.count(xf))
            {
                sum++;
                ss.clear();

            } ss.insert(xf);
        }
        printf("%d\n",sum);
    }
    return 0;
}


發佈了178 篇原創文章 · 獲贊 21 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章