列表

详情


NC210755. 数颜色

描述

MoveToEx找到了很多不同颜色的珠子,他把这些珠子排成了一列,每个珠子的颜色用1,2....表示.定义一个区间的美观度为区间中不同颜色的珠子个数现在MoveToEx想知道,在所有个区间中,所有区间的美观度之和是多少.

输入描述

输入数据有两行,第一行有一个整数n,表示珠子的个数
第二行有n个正整数,表示每个珠子的颜色

输出描述

输出一个整数,表示所有区间的美观度之和  

示例1

输入:

6
1 2 2 3 3 1

输出:

39

说明:

每个区间的不同颜色种类相加答案为39

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 47ms, 内存消耗: 532K, 提交时间: 2020-10-20 20:39:39

#include<bits/stdc++.h>
using namespace std;
set<int> s;
int n,a[1100],ans;
int main() {
	cin>>n;
	for(int i=0; i<n; i++) cin>>a[i];
	for(int i=0; i<n; i++) {
		s.clear();
		for(int j=i; j<n; j++) {
			s.insert(a[j]);
			ans += s.size();
		}
	}
	cout<<ans<<endl;
}

C++11(clang++ 3.9) 解法, 执行用时: 5ms, 内存消耗: 376K, 提交时间: 2020-09-04 21:27:58

#include<iostream>
using namespace std;
int n;
int t[1005];
int s[1005];
int sum;
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		int x;
		cin>>x;
		s[i]=s[i-1]+i-t[x];
		t[x]=i;
		sum=sum+s[i];
	}
	cout<<sum;
	return 0;
}

Python3(3.5.2) 解法, 执行用时: 236ms, 内存消耗: 2768K, 提交时间: 2020-10-20 22:18:10

n=int(input())
ans=0
a=list(map(int,input().split(" ")))
for i in range(n):
    s=set()
    for j in range(i,n):
        s.add(a[j])
        ans+=len(s)
print(ans)

上一题