In the year 8888, the Earth is ruled by the PPF Empire . As the population growing , PPF needs to find more land for the newborns . Finally , PPF decides to attack Kscinow who ruling the Mars . Here the problem comes! How can the soldiers reach the Mars ?
PPF convokes his soldiers and asks for their suggestions . “Rush … ” one soldier answers. “Shut up ! Do I have to remind you that there isn’t any road to the Mars from here!” PPF replies. “Fly !” another answers. PPF smiles :“Clever guy ! Although we haven’t
got wings , I can buy some magic broomsticks from HARRY POTTER to help you .” Now , it’s time to learn to fly on a broomstick ! we assume that one soldier has one level number indicating his degree. The soldier who has a higher level could teach the lower
, that is to say the former’s level > the latter’s . But the lower can’t teach the higher. One soldier can have only one teacher at most , certainly , having no teacher is also legal. Similarly one soldier can have only one student at most while having no
student is also possible. Teacher can teach his student on the same broomstick .Certainly , all the soldier must have practiced on the broomstick before they fly to the Mars! Magic broomstick is expensive !So , can you help PPF to calculate the minimum number
of the broomstick needed .
For example :
There are 5 soldiers (A B C D E)with level numbers : 2 4 5 6 4;
One method :
C could teach B; B could teach A; So , A B C are eligible to study on the same broomstick.
D could teach E;So D E are eligible to study on the same broomstick;
Using this method , we need 2 broomsticks.
Another method:
D could teach A; So A D are eligible to study on the same broomstick.
C could teach B; So B C are eligible to study on the same broomstick.
E with no teacher or student are eligible to study on one broomstick.
Using the method ,we need 3 broomsticks.
……
After checking up all possible method, we found that 2 is the minimum number of broomsticks needed.
For each case, output the minimum number of broomsticks on a single line.
4
10
20
30
04
5
2
3
4
3
4
今天在网上遇到了一个大神 ,特别服气。我提交八次都非法访问内存,就是不知道数组怎么越界。其实 注意题目是30digits ,即最大位数。开辟一般数组肯定内存超限。
所以用hash。不过仍然可以用int定义变量,因为再大的数 都可以通过哈希函数唯一 映射到哈希表里,因为当读入的数据超过int时变为负数,hashh首先要处理这个负数。
因为不能作为下面语句的下标。这题目测试数据有个水的地方,那就是当读入的多个int溢出数的时候num只截取后32位。然后就可能出现两个不同的数有相同的关键值。那么就当做了相同的数来处理。(我说即使超界int也不影响结果,但是大神敏锐的就立马反驳了我,指出了读入num的特殊情况)。
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
const int M=6005;
using namespace std;
int ls[M],gq[M];
int hashh(int k)
{
int t=k;
t=(t%M+M)%M;
if(ls[t]!=0&&gq[t]!=k)
{
t=(t+1)%M;
}
return t;
}
int main()
{
int num,n;
while(cin>>n)
{
memset(ls,0,sizeof(ls));
memset(gq,0,sizeof(gq));
for(int i=0;i<n;i++)
{
scanf("%d",&num);
int p=hashh(num);
gq[p]=num;
ls[p]++;
}
sort(ls,ls+M);
cout<<ls[M-1]<<endl;
}
return 0;
}
#include<iostream>
#include<map>
#include<stdio.h>
using namespace std;
int main()
{
map<int,int>ls;
int n,gq;
while(cin>>n)
{
ls.clear();
int maxx=0;
for(int i=0;i<n;i++)
{
scanf("%d",&gq);
ls[gq]++;
}
for(map<int,int>::iterator it=ls.begin();it!=ls.end();it++)
{
maxx=max(maxx,it->second);
}
cout<<maxx<<endl;
}
return 0;
}