Codeforces 300A Array

题目链接:http://codeforces.com/problemset/problem/300/A

因为题目保证有解,所以可以把数组排序,最小的数分在第一组,然后最大的数如果大于0就分在第二组,其余的数和0分在第三组(比赛的时候只记得0乘0是0,竟然忘记0乘其它数也是0了.....Orz)。如果最大的数小于0或等于0,,说明比它小的数一定小于0,把排序后的数组的第二和第三的数放在第二组,一定能保证乘积为正,剩下的和0分为一组。

#include<cstdio>
#include<iostream>
#include<sstream>
#include<cstdlib>
#include<cstring>
#include<string>
#include<climits>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#include<stack>
#include<set>
#include<map>
using namespace std;
int main()
{
    int n,a[105];
    while(~scanf("%d",&n))
    {
        int i;
        for(i=0; i<n; i++)
            scanf("%d",&a[i]);
        sort(a,a+n);
        printf("1 %d\n",a[0]);
        if(a[n-1]>0)
        {
            printf("1 %d\n",a[n-1]);
            printf("%d %d",n-2,a[n-2]);
            for(i=1; i<n-2; i++)
                printf(" %d",a[i]);
            printf("\n");
        }
        else
        {
            printf("2 %d %d\n",a[1],a[2]);
            printf("%d %d",n-3,a[n-1]);
            for(i=3; i<n-1; i++)
                printf(" %d",a[i]);
            printf("\n");
        }
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-12 12:59:01

Codeforces 300A Array的相关文章

codeforces A. Array题解

Vitaly has an array of n distinct integers. Vitaly wants to divide this array into three non-empty sets so as the following conditions hold: The product of all numbers in the first set is less than zero (?<?0). The product of all numbers in the secon

Codeforces 57C Array dp暴力找规律

题目链接:点击打开链接 先是计算非递增的方案, 若非递增的方案数为x, 则非递减的方案数也是x 答案就是 2*x - n 只需求得x即可. 可以先写个n3的dp,然后发现规律是 C(n-1, 2*n-1) 然后套个逆元即可. #include<iostream> #include<cstdio> #include<vector> #include<string.h> using namespace std; #define ll long long #def

Codeforces 1108E2 Array and Segments (Hard version) 差分, 暴力

Codeforces 1108E2 E2. Array and Segments (Hard version) Description: The only difference between easy and hard versions is a number of elements in the array. You are given an array \(a\) consisting of \(n\) integers. The value of the \(i\)-th element

网络流(最大流):CodeForces 499E Array and Operations

You have written on a piece of paper an array of n positive integers a[1], a[2], ..., a[n] and m good pairs of integers (i1, j1), (i2, j2), ..., (im, jm). Each good pair (ik, jk) meets the following conditions: ik + jk is an odd number and 1 ≤ ik < j

CodeForces 57C Array 组合计数+逆元

题目链接: http://codeforces.com/problemset/problem/57/C 题意: 给你一个数n,表示有n个数的序列,每个数范围为[1,n],叫你求所有非降和非升序列的个数. 题解: 由于对称性,我们只要求非降序的个数就可以了(n个数全部相等的情况既属于非升也属于非降) 我们在满足条件的n个数之前加一个虚节点1,在第n个数之后加一个n,那么考虑这n+2个数组成的非降序列: 假设序列里的第i个数为a[i],我们设xi=a[i+1]-a[i]+1,1<=i<=n+1,则

Codeforces 1076G Array Game 博弈 + 线段树 (看题解)

Array Game 考虑最裸的dp去求胜负态. dp[ i ] 从后面的 m 个状态转移过来. 我们考虑如何用线段树维护, T[ i ][ mask ] 表示 i 这段区间如果后面接的m位是mask使时开头m位的mask, 对于修改的话只要维护一个反过来的T2就可以了. 感觉是可以想出来的题, 为什么没想出来啊啊啊. #include<bits/stdc++.h> #define LL long long using namespace std; const int N = (int)2e5

Codeforces 57C Array dp暴力找到规律

主题链接:点击打开链接 的非增量程序首先,计算, 如果不增加的节目数量x, 非减少一些方案是x 答案就是 2*x - n 仅仅需求得x就可以. 能够先写个n3的dp,然后发现规律是 C(n-1, 2*n-1) 然后套个逆元就可以. #include<iostream> #include<cstdio> #include<vector> #include<string.h> using namespace std; #define ll long long #

CodeForces 498C Array and Operations(最大流)

题目是给一些数和<数对>的下标,然后进行操作:对某个<数对>中的两个数同时除以一个都能被它们整除且不等于1的数,要求的就是最多能进行多少次操作. 除数一定是素数,就是要决定某素数要除哪些<数对>使除的次数最多, ik + jk is an odd number 可以想到这个是个二分图,数最多100个,然后就用最大流做了. 有了POJ2516的经验之后,马上想到,素数是独立的,进行若干次最大流而不是拆若干点跑最大流(10^9大概最多拆30个点吧).. 然后我还是没AC,因

codeforces Upgrading Array

思路:对于每个数分解质因子然后记录每一个质因子的个数,对与在b中出现的质因子就减去1,否则加1,求出总的,然后从后面一次对它们的最大公约数,然后判断除以最大公约数之后,改变量是不是变化,求最大值,变化量为负值的话减去. 1 #include <cstdio> 2 #include <cstring> 3 #include <map> 4 #include <set> 5 #include <algorithm> 6 using namespace