zoukankan      html  css  js  c++  java
  • hdu 5504 GT and sequence

    问题描述
    给出N个整数。你要选择至少一个数,使得你选的数的乘积最大。
    保证任意选一些数相乘的绝对值都不会大于263−12^{63}-1263​​1。
    输入描述
    第一行读入一个数TTT表示数据组数。
    对于每组数据:
    第一行是一个数NNN,第二行是NNN个整数。
    
    1≤T≤10001 leq T leq 10001T1000
    1≤N≤621 leq N leq 621N62
    
    hack时建议输出最后一行的行末回车;每一行的结尾不要输出空格。
    输出描述
    对于每组数据,输出一个数表示最大的乘积。
    输入样例
    1
    3
    1 2 3
    输出样例
    6

    考虑了很多情况才AC了
      1 #pragma comment(linker, "/STACK:1024000000,1024000000")
      2 #include<iostream>
      3 #include<cstdio>
      4 #include<cstring>
      5 #include<cmath>
      6 #include<math.h>
      7 #include<algorithm>
      8 #include<queue>
      9 #include<set>
     10 #include<bitset>
     11 #include<map>
     12 #include<vector>
     13 #include<stdlib.h>
     14 #include <stack>
     15 using namespace std;
     16 #define PI acos(-1.0)
     17 #define max(a,b) (a) > (b) ? (a) : (b)
     18 #define min(a,b) (a) < (b) ? (a) : (b)
     19 #define ll long long
     20 #define eps 1e-10
     21 #define MOD 1000000007
     22 #define N 100
     23 #define inf 1e12
     24 ll n;
     25 ll a[N];
     26 bool cmp(ll a,ll b){
     27    return abs(a)>abs(b);
     28 }
     29 int main()
     30 {
     31    ll t;
     32    scanf("%I64d",&t);
     33    while(t--){
     34        scanf("%I64d",&n);
     35        ll fu=0; ll zheng=0; ll zero=0;
     36        ll num=1;
     37        for(ll i=0;i<n;i++){
     38            scanf("%I64d",&a[i]);
     39            if(a[i]>0){
     40               zheng++;
     41               num*=a[i];
     42            }else if(a[i]<0){
     43               fu++;
     44            }else {
     45               zero++;
     46            }
     47        }
     48        sort(a,a+n,cmp);
     49        if(zheng==n){
     50            ll ans=1;
     51            for(ll i=0;i<n;i++){
     52               ans*=a[i];
     53            }
     54            printf("%I64d
    ",ans);
     55            continue;
     56        }
     57        if(fu==n){
     58           if(fu==1){
     59              printf("%I64d
    ",a[0]);
     60           }else{
     61              ll ans=1;
     62              if(fu%2==0){
     63                 for(ll i=0;i<n;i++){
     64                    ans=ans*a[i];
     65                 }
     66              }else{
     67                 for(ll i=0;i<n-1;i++){
     68                   ans=ans*a[i];
     69                 }
     70              }
     71              printf("%I64d
    ",ans);
     72           }
     73           continue;
     74        }
     75        if(zero==n){
     76           printf("0
    ");
     77           continue;
     78        }
     79 
     80 
     81        ll ans=num;
     82        if(zheng==0 && zero!=0 && fu==1){
     83           ans=0;
     84        }
     85 
     86        ll z;
     87        if(fu%2==1){
     88           z=fu-1;
     89        }else {
     90           z=fu;
     91        }
     92        ll c=0;
     93        for(ll i=0;i<n;i++){
     94            if(c<z){
     95               if(a[i]<0){
     96                  c++;
     97                  ans*=a[i];
     98               }
     99            }else{
    100               break;
    101            }
    102        }
    103        printf("%I64d
    ",ans);
    104 
    105    }
    106     return 0;
    107 }
    View Code
  • 相关阅读:
    js 常用方法
    Request.UrlReferrer
    批处理定时打开一个网页
    js基础知识总结:函数
    .NET DataTable转换为JSON格式的字符串
    .NET解析xml字符串,通过反射给实体类对象赋值,获取实体类数据列表
    .NET错误提示之:无法更新EntitySet“TableName”因为它有一个DefiningQuery
    python中安装web.py
    pycharm中运行flask项目安装flask
    jmeter--查看结果数中响应数据部分乱码
  • 原文地址:https://www.cnblogs.com/UniqueColor/p/4921554.html
Copyright © 2011-2022 走看看