简单题意
有n张牌,分给n/2个人,每人两张,要求每个人牌上的数值之和相等,输入保证有解
思路
先对输入按数值大小排序,然后依次分给每个人最大的,最小的、次大的,次小的,。。。因为输入保证有解,所以这样分肯定是可行解。
代码
include
using namespace std;
const int maxn = 1e3;
struct No{
int v,id;
bool operator < (const No & b) const {
return v < b.v;
}
} num[maxn];;
int main(){
int T;
cin >>T;
for(int i = 0 ; i < T ; i ++){
scanf("%d", &num[i].v);
num[i].id = i+1;
}
sort(num,num + T);
for(int i = 0 ; i < T/2 ; i ++){
printf("%d %d\n",num[i].id,num[T-i-1].id);
}
}