hdu---2192MagicBuilding
2014-02-05 21:42
246 查看
MagicBuilding
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1067 Accepted Submission(s): 478
[align=left]Problem Description[/align]
As the increase of population, the living space for people is becoming smaller and smaller. In MagicStar the problem is much worse. Dr. Mathematica is trying to save land by clustering buildings and then we call the set of buildings MagicBuilding. Now we can treat the buildings as a square of size d, and the height doesn't matter. Buildings of d1,d2,d3....dn can be clustered into one MagicBuilding if they satisfy di != dj(i != j).
Given a series of buildings size , you need to calculate the minimal numbers of MagicBuildings that can be made. Note that one building can also be considered as a MagicBuilding.
Suppose there are five buildings : 1, 2, 2, 3, 3. We make three MagicBuildings (1,3), (2,3), (2) .And we can also make two MagicBuilding :(1,2,3), (2,3). There is at least two MagicBuildings obviously.
[align=left]Input[/align]
The first line of the input is a single number t, indicating the number of test cases.
Each test case starts by n (1≤n≤10^4) in a line indicating the number of buildings. Next n positive numbers (less than 2^31) will be the size of the buildings.
[align=left]Output[/align]
For each test case , output a number perline, meaning the minimal number of the MagicBuilding that can be made.
[align=left]Sample Input[/align]
2
1
2
5
1 2 2 3 3
[align=left]Sample Output[/align]
1
2
//题目描述就不说了,因为n最大为10000,所以直接快排,再查找即可。 (n为10000时,一般做到n^2都不会超时,这里快排只有n*log2n,是肯定可行的。)
代码:
#include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> #include <algorithm> using namespace std; #define N 10010 int f ; int cmp(int x,int y){ if(x>y) return 1; else return 0; } int main() { freopen("in.txt","r",stdin); int i,j,a,b,m,n;int len,T; scanf("%d",&T); while(T--){ scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&f[i]); sort(f,f+n); int num=1;int max=1; for(i=1;i<n;i++){ if(f[i]==f[i-1]) num++; else{ if(num>max) max=num; num=1; } } if(num>max) max=num; printf("%d\n",max); } return 0; } //其中for循环可以改成下面的形式,最终直接输出len即可! for (i = 1; i < n;++i) if (a[i] == a[i-len]) len++;
相关文章推荐
- hdu 1254 、1175
- HDU 2258 Continuous Same Game (1)
- hdu 4313 Matrix 并查集
- HDU 4292 Food [网络流]
- hdu 2276 点灯(矩阵应用)
- hdu 3631(floyd思想的运用)
- Text Reverse hdu
- HDU 4686 Arc of Dream
- HDU 4630 No Pain No Game(离线 + 树状数组)
- hdu 2563 统计问题
- hdu 4539 郑厂长系列故事——排兵布阵 状态压缩dp
- hdu 1074
- hdu 1711 Number Sequence(KMP)
- hdu--2196--树上某点到其余结点的最远距离
- HDU 2.1.5 七夕节
- hdu 2829 Lawrence (dp斜率优化||四边形优化)
- hdu 4738 Caocao's Bridges (找桥,有重边)
- 上海邀请赛 A题目 HDU 5236(dp)
- HDU 5336(2015多校4)-XYZ and Drops(bfs)
- HDU1213-How Many Tables 并查集