FOJ 1656 How many different numbers
2009-08-02 19:28
274 查看
http://acm.fzu.edu.cn/problem.php?pid=1656
题目大意:给你一组数,将他们放入数组中。之后给你若干个数组下标区间,求出这个区间中有多少个的不同数值。
解题思路:定义一个结构体A,含有数据成员locate,value,分别用来记录该组数据的值和所在位置。之后用sort函数按照value值从小到大排序。再定义一个数组B,以结构体A的locate值为下标进行编号,同样的元素编号相同,不同元素编号不同。再定义一个数组C,用来标记在系统给定的区间内,起初C数组元素初始化为0,以B数组元素为C的下标,注意哦,B数组元素是A结构体各个的编号哦,如果B[i]元素的一样,则说明值一样,否则就是不一样的。最后输出结果就是了。
题目大意:给你一组数,将他们放入数组中。之后给你若干个数组下标区间,求出这个区间中有多少个的不同数值。
解题思路:定义一个结构体A,含有数据成员locate,value,分别用来记录该组数据的值和所在位置。之后用sort函数按照value值从小到大排序。再定义一个数组B,以结构体A的locate值为下标进行编号,同样的元素编号相同,不同元素编号不同。再定义一个数组C,用来标记在系统给定的区间内,起初C数组元素初始化为0,以B数组元素为C的下标,注意哦,B数组元素是A结构体各个的编号哦,如果B[i]元素的一样,则说明值一样,否则就是不一样的。最后输出结果就是了。
#include <iostream> #include <algorithm> using namespace std; class num { public: int locate; /*记录该数值在数组中的下标*/ int value;/*数值*/ }a[100001]; bool cmp(num x,num y) { return x.value<y.value; } int main() { int NumOfValue; int NumOfTest; int S,T; int count; register int i,j,k; while (scanf("%d",&NumOfValue)!=EOF) { for (i=1;i<=NumOfValue;i++) { scanf("%d",&a[i].value); a[i].locate = i; } sort(a,a+i,cmp); int t=0; int B[100001]; /*用来给结构体中的元素进行编号*/ /************************************************************************/ /* 编号 */ /************************************************************************/ B[a[0].locate] = 0; for (j=1;j<=NumOfValue;j++) { if (a[j].value == a[j-1].value) { B[a[j].locate] = B[a[j-1].locate]; } else { t++; B[a[j].locate] = t; } } int C[100001];/*标记是否访问过,访问过则代表与之前的某个元素是同一个元素*/ scanf("%d",&NumOfTest); for (j=0;j<NumOfTest;j++) { count = 0; memset(C,0,sizeof(C)); scanf("%d%d",&S,&T); for (k=S;k<=T;k++) { if (C[(B[k])] == 0) { count++; C[(B[k])] = 1;/*标记为1,这样相同元素的值就会被过滤掉,算出的count就是不同元素个数*/ } } printf("%d/n",count); } } return 0; }
相关文章推荐
- FZU 1656 How many different numbers
- 1656 How many different numbers
- FZU 1656 How many different numbers
- fzu 1656 How many different numbers(线段树)
- 1656 How many different numbers
- How many different numbers
- HDU 2138 How many prime numbers
- ACM刷题之HDU————How many prime numbers(素数打表)
- hdu 2138 How many prime numbers(miller_rabin?)
- HDOJ(HDU) 2138 How many prime numbers(素数-快速筛选没用上、)
- HDU 2138 How many prime numbers (判素数,米勒拉宾算法)
- How many prime numbers HDU - 2138(素数判定)
- HDU 2138 How many prime numbers
- ACMSTEP 2.1.2 How many prime numbers //数论 素数
- How many prime numbers
- HDU 2138:How many prime numbers 【水】
- HDU 2138 How many prime numbers【素数判断,卡时间!!】
- HDU-2138 How many prime numbers
- [HDU2138]How many prime numbers
- hdu 2138 How many prime numbers 大规模素数判断