CF300A Array
把一个数组分成三组,第一组数之积 ,第二组数之积 ,第三组数之积 。
我们先把所有 放在第三个集合,然后把一个负数放在第一个集合。
对于第二个集合,先把生于的数都放进去,如果发现乘积为负,则把一个负数放在第三个集合。
这样就可以满足条件了。
#include<cstdio>
#include<vector>
using namespace std;
int n,a[110],now=1;
vector<int>v1,v2,v3;
bool vis[110];
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++){
if(a[i]==0) v3.push_back(0),vis[i]=true;
else{
if(a[i]<0) now*=(-1);
}
}
if(now==1){
for(int i=1;i<=n;i++)
if(a[i]<0){
v3.push_back(a[i]);
vis[i]=true;
break;
}
}
for(int i=1;i<=n;i++)
if(a[i]<0 && (!vis[i])){
v1.push_back(a[i]);
vis[i]=true;
break;
}
for(int i=1;i<=n;i++)
if(!vis[i]) v2.push_back(a[i]);
printf("%d ",v1.size());
for(int i=0;i<v1.size();i++) printf("%d ",v1[i]); puts("");
printf("%d ",v2.size());
for(int i=0;i<v2.size();i++) printf("%d ",v2[i]); puts("");
printf("%d ",v3.size());
for(int i=0;i<v3.size();i++) printf("%d ",v3[i]); puts("");
return 0;
}