糖果
有n个小朋友,有m袋糖果,第i袋的糖果数量是a[i]。已知n<=m<2n。
每个小朋友至少要有一袋糖果,至多只能要两袋糖果。
分配的目标是把这m袋糖果全部分完,而且要使得每个小朋友最终得到的糖果数量都是相等的。
如果可以做到则输出”possible”,如果做不到则输出”impossible”。
注意:不能拆开一个袋子的糖果,必须整袋整袋的分配。
输入格式
第一行,一个正整数R,表示有R组测试数据。1<=R<=10。
每组测试数据的格式是:
第一行,两个整数n和m。1<=n<=50。n<=m<2n。
第二行,m个整数,第i个整数是a[i]。1<=a[i]<=1000。
输出格式
共R行,每行一个字符串,”possible”或者”impossible”,双引号不用输出。
输入/输出例子1
输入:
3
1 1
47
3 5
10 8 10 1 1
3 5
3 9 10 7 1
输出:
possible
impossible
possible
代码如下:
#include<bits/stdc++.h>
using namespace std;
long long n,c,d,b=1,q=1,s=0,a[200]={0};
int main(){
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>c>>d;
for(int i=1;i<=d;i++)
{
cin>>a[i];
s=s+a[i];
}
if(s%c!=0)
{
cout<<"impossible"<<endl;
continue;
}
else
{
sort(a+1,a+d+1);
for(int j=d;j>=b;j--)
{
if(a[j]==s/c)continue;
if(a[j]+a[b]==s/c)
{
b++;
continue;
}
q=-1;
break;
}
if(q==-1)
{
cout<<"impossible"<<endl;
continue;
}
else cout<<"possible"<<endl;
}
}
return 0;
}