题意: 有N对和为1000的数(ai + gi = 1000), 每对选择一个, 求两边相差不超过500的任意分配方法
分析:设有x个ai 则, 差值可以表示为 x * 1000 - sum(gi).枚举x输出答案即可。
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
#define MAX 1000005
using namespace std;
int a[MAX], b[MAX];
int n;
int main()
{
///freopen("in.txt","w",stdout);
cin>>n;
int sum = 0;
for(int i = 0; i < n; i++){
cin>>a[i]>>b[i];
sum += b[i];
}
int all = 0, isFind = 0;
for(int i = 0; i <= n; i++){
if(abs(all - sum) <= 500){
// cout<<all<<endl;
isFind = 1;
for(int j = 0; j < i; j++){
cout<<"A";
}
for(int j = i; j < n; j++){
cout<<"G";
}cout<<endl;
break;
}
all += 1000;
}
if(!isFind)puts("-1");
}