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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值