对于这道当年的金组题,第一反应解法:一个大根堆&一个小根堆,维护每一种颜色的珠子个数,每一次用大根堆顶元素和小根堆顶元素匹配并输出……事实上,曾经有许多大神用这种方法AC此题,代码长度 2000 B+!!!
事实上,正解的做法没有更水!!!
【USACO2008】Gold Pearl Pairing C++代码实现:
#include <cstdio>
int n,c,now,pearl[100001];
int main()
{
scanf("%d%d",&n,&c);
for(int x,i=1;i<=c;i++)
{
scanf("%d",&x);
while(x--)
pearl[++now]=i;
}
for(int i=1;i<=n/2;i++)
printf("%d %d\n",pearl[i],pearl[i+n/2]);
}