⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 waits.cpp

📁 设计一个算法
💻 CPP
字号:
#include<iostream>
#include<fstream>
using namespace std;
template<class T>
class MinHeap
{
	public:
		MinHeap(int MinHeapSize);
		~MinHeap(){delete[]heap;}
		int Size()const{return Last;}
		T Min(){return heap[1];}
		MinHeap<T>&Insert(const T&x);
        MinHeap<T>&DeleteMin(T&x);
		void Initialize(T a[],int size,int ArraySize);
		void Deactivate(){heap=0;}
	private:
		int Last,MaxSize;
		T *heap;
};
template<class T>
MinHeap<T>::MinHeap(int MinHeapSize)
{
	MaxSize=MinHeapSize;
	heap=new T[MaxSize+1];
	Last=0;
}
template<class T>
MinHeap<T>&MinHeap<T>::Insert(const T&x)
{
	int i=++Last;
	while(i!=1&&x<heap[i/2])
	{
		heap[i]=heap[i/2];
		i/=2;
	}
	heap[i]=x;
	return *this;
}
template<class T>
MinHeap<T>&MinHeap<T>::DeleteMin(T&x)
{
	x=heap[1];
	T y=heap[Last--];
	int i=1,ci=2;
	while(ci<=Last)
	{
		if(ci<Last&&heap[ci]>heap[ci+1]) ci++;
		if(y<=heap[ci]) break;
		heap[i]=heap[ci];
		i=ci;
		ci*=2;
	}
	heap[i]=y;
	return *this;
}
template<class T>
void MinHeap<T>::Initialize(T a[],int size,int ArraySize)
{
	delete[]heap;
	heap=a;
	Last=size;
	MaxSize=ArraySize;
	for(int i=Last/2;i>=1;i--)
	{
		T y=heap[i];
		int c=2*i;
		while(c<=Last)
		{
			if(c<Last&&heap[c]>heap[c+1]) c++;
			if(y<=heap[c]) break;
			heap[c/2]=heap[c];
			c*=2;
		}
		heap[c/2]=y;
	}
}
template<class T>
void HeapSort(T a[],int n)
{
	MinHeap<T> H(1);
	H.Initialize(a,n,n);
	T x;
	for(int i=n-1;i>=1;i--)
	{
		H.DeleteMin(x);
		a[i+1]=x;
	}
	H.Deactivate();
}
int main()
{
    ifstream in("c:\\input.txt");
    ofstream out("c:\\output.txt");
    if(!in.is_open())
	{
        out<<"error"<<endl;
        exit(1);
    }
	int n,s;
	double sum=0;
	in>>n>>s;
	int *a=new int[n+1];
    for(int i=1;i<=n;i++)
        in>>a[i];
    HeapSort(a,n);
	for(i=n;i-s>=1;i--)
		a[i-s]+=a[i];
	for(i=1;i<=n;i++)
		sum+=a[i];
	out<<sum/n<<endl;
	delete[]a;
    in.close();
    out.close();
    return 0;
} 





	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -