题目连接
https://ac.nowcoder.com/acm/contest/7226/B
解题思路
先统计下所有珠子。
二维遍历左端点和右端点,遍历右端点的时候判断统计不同颜色珠子的个数,每遍历到一个右端点ans就加上不同的珠子数,遍历左端点时cnt置零。
cnt数组的生存周期与每个左端点是相同的,cnt[i]表示此时左端点开始的区间颜色为i的珠子的个数,只要统计过这个颜色,就不再让w+1了。
不是特别好讲,希望你能理解什么意思。这个方法在统计一段内不同种类有多少比较好用。
AC代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,ans=0;
int cnt[1010],a[1010];
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++){
fill(cnt+1,cnt+1001,0);
for(int j=i,w=0;j<=n;j++) w+=(++cnt[a[j]]==1),ans+=w;
}
cout<<ans<<endl;
}
京公网安备 11010502036488号