题目描述
作为生日礼物,BESSIE得到了N (2 <= N <= 100,000;N%2 == 0)颗(假?)珍珠, 每颗珍珠的颜色为C种颜色之一 (1 <= C <= N).BESSIE发现N是一个偶数,她想把所有珍珠分成N/2对,使得每对的两颗珍珠的颜色都不同.BESSIE知道这样一个分配在给定数据里都是可能的,请帮助她找到这样一个分配. 如果有多个解,任意一个,输出任意一个.
输入
第1行: 两个数, N 和 C
第 2…C + 1 行: 第i+1行含有一个数,C_i, 颜色为i的珍珠的数目.
输出
第 1…N/2行: 第i行包含两个数a_i和b_i. 对应于一对颜色分别为a_i和b_i的珍珠.
思路讲解
简单题,只需要以中心点为基准,从左到右寻找映射点即可。
由于数据时合法的,所以任何一种颜色的珍珠个数都小于N/2。
代码:
#include <cstdio>
const int MAXN = 100000 + 1;
int C, N, M, j, ring[MAXN];
int main()
{
freopen("ppairing.in", "r", stdin);
freopen("ppairing.out", "w", stdout);
scanf("%d %d", &N, &C);
for(int i = 1; i <= C; i++) {
scanf("%d", &M);
while(M--)
ring[++j] = i;
}
for(int i = 1; i <= N / 2; i++)
printf("%d %d\n", ring[i], ring[N / 2 + i]);
fclose(stdin);
fclose(stdout);
return 0;
}