【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;
}


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