基础编程——Manager
题目描述
思路
觉得思路很简单,用long存数,使用一个a[100001]的数组,每输入一个大学的人数,a【人数】++;为了使程序运行更快,记录输入的最大值。
从最大值开始,如果a[i]>0,则sum+=i;之后a[i]--;若a[i]依旧大于0,则吧a[i]加到a[i-1]里,这样循环,最后得到的sum即为所求。
通过测试样例67%,我也不知道怎么回事,我猜是某个临界值忘了,希望能有大佬指点迷津。
源码
#include<iostream>
using namespace std;
int main(){
long k,i,j,a[100001],n,max=0;
long long int sum=0;
for(i=0;i<100001;i++) a[i]=0;
cin>>k;
for(i=0;i<k;i++){
cin>>n;
a[n]++;
if(n>=max) max=n;
}
for(i=max;i>0;i--){
if(a[i]!=0){
sum+=i;
a[i]--;
}
if(a[i]>0) a[i-1]+=a[i];
}
cout<<sum;
return 0;
}
运行结果
只通过了67%的测试样例,我猜是某个临界值忘了,希望大佬指点迷津!!!