社区讨论

0ptsWA求调, 玄关

P13195 [GCJ 2016 #1C] Senate Evacuation参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhjdp50p
此快照首次捕获于
2025/11/04 00:52
4 个月前
此快照最后确认于
2025/11/04 00:52
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=1e3+5;
int t1, n, heap[N], p[N], size, go, sum, k;
char a, b;
void heapify(){
	int i=1, son=i<<1;
	if(!p[heap[1]]){
		heap[1]=heap[size];
		heap[size]=0;
		size--;
	}
	son= p[heap[son]]<p[heap[son+1]] && son+1<=size ? son+1 : son;
	while(son<=size && p[heap[i]]<p[heap[son]]){
		swap(heap[i], heap[son]);
		i=son; son=i<<1;
		son= son+1<=size && p[heap[son+1]]>p[heap[son]] ? son+1 : son;
	}
}
int main(){
	cin>>t1;
	for(int t=1; t<=t1; t++){
		cin>>n;
		size=0;
		sum=0;
		memset(heap, 0, (n+5)*sizeof(int));
		for(int i=1; i<=n; i++){
			cin>>p[i];
			sum+=p[i];
		}
		for(int i=1; i<=n; i++){
			heap[++size]=i;
			go=size>>1;
			k=size;
			while(go>=1 && p[go]<p[k]){
				swap(heap[go], heap[k]);
				k=go;
				go/=2;
			}
		}
		printf("Case #%d: ", t);
		while(sum){
			a='A'-1+heap[1];
			p[heap[1]]--;
			heapify();
			b='A'-1+heap[1];
			p[heap[1]]--;
			heapify();
			printf("%c%c ", a, b);
			sum-=2;
			if(sum==1){
				a=heap[1]+'A'-1;
				cout<<a<<endl;
				break;
			}
		}
		printf("\n");
	}
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...