對于這道當年的金組題,第一反應解法:一個大根堆&一個小根堆,維護每一種顔色的珠子個數,每一次用大根堆頂元素和小根堆頂元素比對并輸出……事實上,曾經有許多大神用這種方法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]);
}