CF300A 题解

CF300A Array

\text{Discribe}

把一个数组分成三组,第一组数之积 < 0,第二组数之积 > 0,第三组数之积 =0

\text{Solution}

我们先把所有 0 放在第三个集合,然后把一个负数放在第一个集合。

对于第二个集合,先把生于的数都放进去,如果发现乘积为负,则把一个负数放在第三个集合。

这样就可以满足条件了。

\text{Code}

#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;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 区间 是什么 关于动态规划,其实说白了,就是一种递推。当我们解决大问题的时候,先把它 分解 为若干个子问题,再把...
    BreakPlus阅读 5,356评论 0 3
  • CF154A Hometask[https://www.luogu.com.cn/problem/CF154A] ...
    BreakPlus阅读 1,346评论 0 1
  • 一 竞赛简介 万恶之源[https://oi-wiki.org/] 各种竞赛知识的汇总。 1. 赛制介绍 http...
    速度时间阅读 5,072评论 0 3
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 12,764评论 28 53
  • 信任包括信任自己和信任他人 很多时候,很多事情,失败、遗憾、错过,源于不自信,不信任他人 觉得自己做不成,别人做不...
    吴氵晃阅读 11,368评论 4 8

友情链接更多精彩内容