lsnu暑假集训第二天(排序,二分,折半,Huffman)

//A
#include 
#include 
#include 
using namespace std;


const int maxn=1e2+5; 
void solve(){
	int a[maxn];
	pair pa[maxn];
	
	int n;
	while(cin>>n){
		if(n==0) return;
		for(int i=0;i>a[i];
		for(int i=0;i=0;i--) printf(" %d",pa[i].second);
		printf("\n");	
	}
}


int main(){
	solve();
	return 0;
}

//B
#include 
#include 
#include 
using namespace std;


const int maxn=4e4;

int large[16000000];
void solve(){
	int a[4][maxn];
	
	int n;
	scanf("%d",&n);
	for(int i=0;i
#include 
#include 
using namespace std;

const int maxn=2e4; 

void solve(){
	int n;
	scanf("%d",&n);
	priority_queue,greater > myheap;
	
	int t;
	for(int i=0;i1){
		int num1=myheap.top();
		myheap.pop();
		int num2=myheap.top();
		myheap.pop();
		ans+=num1+num2;
		myheap.push(num1+num2);
	}
	printf("%lld\n",ans);
}


int main(){
	solve();
	return 0;
}

//D
#include 
#include 
#include 
using namespace std;


const int maxn=1e3+5; 
void solve(){
	char s[maxn];
	while(scanf("%s",&s)!=EOF){
		int index=0,now=0,count=0;
		
		int ans[maxn],ansnum=0;
		
		while(s[index]){
			if(s[index]=='5'){
				if(count){
					ans[ansnum++]=now;
					count=0;
					now=0;
				}
			}
			else{
				count++;
				now=now*10+s[index]-'0';
			}
			index++;
		}
		if(count) ans[ansnum++]=now;
		
		sort(ans,ans+ansnum);
		printf("%d",ans[0]);
		for(int i=1;i
#include 
using namespace std;

struct treenode{
	int data;
	treenode *parent;
	bool operator <(treenode a) const  {  return data < a.data; }
    bool operator >(treenode a) const  {  return data > a.data; }
};

int deep(treenode* i){
	if(i->parent==NULL) return 0;
	return 1+deep(i->parent);
}


const int maxn=1e5+5;
int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		int m;
		scanf("%d",&m);
		char s[maxn];
		scanf("%s",&s);
		float count[26];
		for(int i=0;i<26;i++) count[i]=0;
		int index=0;
		while(s[index]){
			count[s[index]-'a']+=1;
			index++;
		}
		int a[26],anum=0;
		for(int i=0;i<26;i++) if(count[i]) a[anum++]=count[i];
		treenode base[anum*2];
		int nowbasenum=anum;
		for(int i=0;i,greater > que;
		for(int i=0;idata; 
		}
		else{
			while(que.size()>1){
				treenode* num1=que.top();
				que.pop();
				treenode* num2=que.top();
				que.pop();
				
				base[nowbasenum].data=num1->data+num2->data;
				base[nowbasenum].parent=NULL;
				num1->parent=&base[nowbasenum];
				num2->parent=&base[nowbasenum];
		
				que.push(&base[nowbasenum++]);
			}
			for(int i=0;i
#include 
#include 
using namespace std;

const int maxn=1e3+5; 

bool norepeat(int a1,int a2,int b1,int b2){
	if(a1==b1||a1==b2||a2==b1||a2==b2) return false;
	return true;
}

bool comp(const pair &a,const pair &b){
	return a.first pa[1000005];
const int inf=1136870912;
void solve(){
	int n;
	int a[maxn];
	while(scanf("%d",&n)){
		if(n==0) break;
		for(int i=0;i=1&&ans==-inf;i--){
			for(int j=i-1;j>=0&&ans==-inf;j--){
				pair tpa=make_pair(a[i]-a[j],0);
				int l=lower_bound(pa,pa+count,tpa,comp)-pa,r=upper_bound(pa,pa+count,tpa,comp)-pa;
				for(int k=l;k

 

你可能感兴趣的:(做题笔记)