题意:给出一个数组,2种操作:。1:x*y然后x消失,2:除掉x(2操作最多只能进行一次)。问最大的结果的一种操作方式。
逻辑题,看能不能想全面。

1先数好0,正,负的数量,zero,pos,neg。如果0数量不为0,在所有0的内部用操作1减少到只剩1个0,zero置1;(删去0不影响结果,如果结果是0,那么剩1个0也能做到,如果结果不是0,那么删0是必须的)

2负数有奇数个时(这种情况下一定有非负解)(1)如果zero=0,用操作2删掉最大的负数(不删结果负,删了必为正)(2)zero=1,用0和最大的负数乘。如果pos!=0或者neg!=1,再用操作2删去0;

3负数有0个时:如果有正数且zero=1,用操作2删去0;没正数结果只能为0(即给的数列全是0)

4负数

//#pragma comment(linker,"/STACK:1024000000,1024000000")
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<vector>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<algorithm>
#include <stack>
#include <list>
using namespace std;
const int SZ=,INF=0x7FFFFFFF;
typedef long long lon;
const double EPS=1e-;
bool isneg(int x)
{
return x<;
} bool ispos(int x)
{
return x>;
} int main()
{
std::ios::sync_with_stdio();
//freopen("d:\\1.txt","r",stdin);
int n;
cin>>n;
vector<int> vct(n);
for(int i=;i<n;++i)
{
cin>>vct[i];
}
int negnum=count_if(vct.begin(),vct.end(),isneg);
int zeronum=count(vct.begin(),vct.end(),);
int posnum=n-negnum-zeronum;
//if(vct[0]==582204189 )cout<<negnum<<" "<<zeronum<<" "<<posnum<<endl;
if(zeronum>)
{
int last=-;
for(int i=;i<n;++i)
{
if(vct[i]==)
{
if(last!=-)
{
cout<<<<" "<<last+<<" "<<i+<<endl;
vct[last]=-INF;
}
last=i; }
}
}
if(negnum&)
{
if(zeronum==)
{
int maxv=-INF,maxid=;
for(int i=;i<n;++i)
{
if(vct[i]<&&vct[i]>maxv)
{
maxv=vct[i];
maxid=i;
}
}
cout<<<<" "<<maxid+<<endl;
vct[maxid]=-INF;
}
else
{
int maxv=-INF,maxid=;
for(int i=;i<n;++i)
{
if(vct[i]<&&vct[i]>maxv)
{
maxv=vct[i];
maxid=i;
}
}
int pos=find(vct.begin(),vct.end(),)-vct.begin();
cout<<<<" "<<maxid+<<" "<<pos+<<endl;
if(posnum||negnum!=)cout<<<<" "<<pos+<<endl;
vct[maxid]=-INF;
vct[pos]=-INF;
}
}
else if(negnum==)
{
if(posnum&&zeronum)
{
int pos=find(vct.begin(),vct.end(),)-vct.begin();
cout<<<<" "<<pos+<<endl;
vct[pos]=-INF;
} }
else if(zeronum)
{
int pos=find(vct.begin(),vct.end(),)-vct.begin();
cout<<<<" "<<pos+<<endl;
vct[pos]=-INF;
} int last=-;
for(int i=;i<n;++i)
{
if(vct[i]!=-INF)
{
if(last==-)last=i;
else
{
cout<<<<" "<<last+<<" "<<i+<<endl;
last=i;
}
}
}
return ;
}

为其它偶数时(至少为2,一定有正数解),如果zero=1删去1

上面删的数用数组记录,最后没删的数用操作1乘起来。

codeforces 1042c// Array Product// Codeforces Round #510(Div. 2)的更多相关文章

  1. codeforces 1042C Array Product【构造】

    题目:戳这里 题意:n个数,两种操作,第一种是a[i]*a[j],删掉a[i],第一种是直接删除a[i](只能用一次)剩下的数序列号不变.操作n-1次,使最后剩下的那个数最大化. 解题思路: 正数之间 ...

  2. Codeforces Round #510 (Div. 2)

    Codeforces Round #510 (Div. 2) https://codeforces.com/contest/1042 A 二分 #include<iostream> usi ...

  3. CF Round #510 (Div. 2)

    前言:没想到那么快就打了第二场,题目难度比CF Round #509 (Div. 2)这场要难些,不过我依旧菜,这场更是被\(D\)题卡了,最后\(C\)题都来不及敲了..最后才\(A\)了\(3\) ...

  4. Codeforces Round #510 (Div. 2) C. Array Product

    题目 题意: 给你n个数,有两种操作,操作1是把第i个位置的数删去, 操作2 是把 a[ j ]= a[ i ]* a[ j ],把a[ i ]删去 .n-1个操作以后,只剩1个数,要使这个数最大 . ...

  5. Codeforces Round #510 (Div. 2) D. Petya and Array(树状数组)

    D. Petya and Array 题目链接:https://codeforces.com/contest/1042/problem/D 题意: 给出n个数,问一共有多少个区间,满足区间和小于t. ...

  6. Codeforces Round #510 (Div. 2) D. Petya and Array(离散化+反向树状数组)

    http://codeforces.com/contest/1042/problem/D 题意 给一个数组n个元素,求有多少个连续的子序列的和<t (1<=n<=200000,abs ...

  7. codeforces 1042d//Petya and Array// Codeforces Round #510 (Div. 2)

    题意:给出一个数组,求其中和小于t的区间数. 先计算前缀和数组sum[i].对当前的sum[i],查询树状数组中有几个比(sum[i]-t)大的数,那么用sum[i]减它就是一个合法区间.再将当前的s ...

  8. Codeforces Round #510 (Div. 2) B. Vitamins

    B. Vitamins 题目链接:https://codeforces.com/contest/1042/problem/B 题意: 给出几种药,没种可能包含一种或多种(最多三种)维生素,现在问要吃到 ...

  9. Codeforces Round #510 (Div. 2)(C)

    传送门:Problem C https://www.cnblogs.com/violet-acmer/p/9682082.html 题意: 给你n个数,定义有两种操作 ① 1 i j : (i != ...

随机推荐

  1. 文本按列导入excel

    打开excel,选择数据选项卡,自文本选项.

  2. mustache语法

    mustache 模板,用于构造html页面内容.在实际工作中,当同一个模板中想要调用不同的函数来渲染画面,在已经自定义好了的前提下,可以在渲染页面时对传入的参数进行手动判断.  以下是学习笔记内容: ...

  3. Filter过滤器与Session会话跟踪技术

    Filter过滤器 适用场景 1.为web应用程序的新功能建立模型(可被添加到web应用程序中或者从web应用程序中删除而不需要重写基层应用程序代码)2.用户授权Filter:负责检查用户请求,根据请 ...

  4. JDBC报错记录

    用JDBC连接oracle时 有如下问题: 问题一.java.lang.ClassNotFoundException: oracle.jdbc.driver.oracledriver 解决: 可以在环 ...

  5. 20145118 《Java程序设计》课程总结

    20145118 <Java程序设计>课程总结 每周读书笔记连接汇总 假期笔记 http://www.cnblogs.com/cy1123/p/5224305.html 第一周读书笔记 h ...

  6. 20145321 《网络对抗》 Web基础

    20145321 <网络对抗> Web基础 基础问题回答 (1)什么是表单 表单在网页中主要负责数据采集功能,一个表单有三个基本组成部分:表单标签——这里面包含了处理表单数据所用CGI程序 ...

  7. [noip模拟题]科技节 - 搜索 - 位运算优化

    [问题描述] 一年一度的科技节即将到来.同学们报名各项活动的名单交到了方克顺校长那,结果校长一看皱了眉头:这帮学生热情竟然如此高涨,每个人都报那么多活动,还要不要认真学习了?!这样不行!……于是,校长 ...

  8. Python3基础 break while循环示例

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  9. arch/manjaro linux configuration

    0. Installation SystemConfiguration: # 启动时选择第二项boot(non-free),Manjaro自带的驱动精灵会帮你安装好所需驱动,笔记本双显卡则会帮你安装b ...

  10. 星系炸弹|2015年蓝桥杯B组题解析第二题-fishers

    星系炸弹 在X星系的广袤空间中漂浮着许多X星人造"炸弹",用来作为宇宙中的路标. 每个炸弹都可以设定多少天之后爆炸. 比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2 ...