题解 | #数组分组#
数组分组
http://www.nowcoder.com/practice/9af744a3517440508dbeb297020aca86
#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
vector<vector<int>> g(int n,int m)
{
vector<vector<int>>c;
for(int i=0;i<pow(2,n);i++)
{
vector<int>a;
int b=0;
for(int j=0;j<n;j++)
{
int f=1<<j;
if ((i & (1 << j)) != 0)
{
a.push_back(j),b++;
}
}
if(b==m)
{
c.push_back(a);
}
}
return(c);
}
int main()
{
int a;
while(cin>>a)
{
vector<int>b;
for(int i=0;i<a;i++)
{
int c;
cin>>c;
b.push_back(c);
}
vector<int>d,e;
for(int i=0;i<b.size();i++)
{
if(b[i]%5==0)
{
d.push_back(b[i]);
b.erase(b.begin()+i);
i--;
}
}
int u=0,v=0;
for(int i=0;i<d.size();i++)
{
u=u+d[i];
}
for(int i=0;i<b.size();i++)
{
if(b[i]%3==0)
{
e.push_back(b[i]);
b.erase(b.begin()+i);
i--;
}
}
for(int i=0;i<e.size();i++)
{
v=v+e[i];
}
int f=b.size();
if(f==0)
{
if(u-v==0)
{
cout<<"true";
continue;
}
else
{
cout<<"false";
continue;
}
}
int w=0;
for(int i=0;i<b.size();i++)
{
w=w+b[i];
}
for(int i=1;i<=f;i++)
{
vector<vector<int>>h;
h=g(f,i);
for(int j=0;j<h.size();j++)
{
int o=0;
for(int m=0;m<h[j].size();m++)
{
o=o+b.at(h[j][m]);
}
if(max(w-2*o,2*o-w)==max(u-v, v-u))
{
cout<<"true";
goto x;
}
}
}
cout<<"false";
x:
continue;
}
return(0);
}
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
vector<vector<int>> g(int n,int m)
{
vector<vector<int>>c;
for(int i=0;i<pow(2,n);i++)
{
vector<int>a;
int b=0;
for(int j=0;j<n;j++)
{
int f=1<<j;
if ((i & (1 << j)) != 0)
{
a.push_back(j),b++;
}
}
if(b==m)
{
c.push_back(a);
}
}
return(c);
}
int main()
{
int a;
while(cin>>a)
{
vector<int>b;
for(int i=0;i<a;i++)
{
int c;
cin>>c;
b.push_back(c);
}
vector<int>d,e;
for(int i=0;i<b.size();i++)
{
if(b[i]%5==0)
{
d.push_back(b[i]);
b.erase(b.begin()+i);
i--;
}
}
int u=0,v=0;
for(int i=0;i<d.size();i++)
{
u=u+d[i];
}
for(int i=0;i<b.size();i++)
{
if(b[i]%3==0)
{
e.push_back(b[i]);
b.erase(b.begin()+i);
i--;
}
}
for(int i=0;i<e.size();i++)
{
v=v+e[i];
}
int f=b.size();
if(f==0)
{
if(u-v==0)
{
cout<<"true";
continue;
}
else
{
cout<<"false";
continue;
}
}
int w=0;
for(int i=0;i<b.size();i++)
{
w=w+b[i];
}
for(int i=1;i<=f;i++)
{
vector<vector<int>>h;
h=g(f,i);
for(int j=0;j<h.size();j++)
{
int o=0;
for(int m=0;m<h[j].size();m++)
{
o=o+b.at(h[j][m]);
}
if(max(w-2*o,2*o-w)==max(u-v, v-u))
{
cout<<"true";
goto x;
}
}
}
cout<<"false";
x:
continue;
}
return(0);
}