http://codeforces.com/contest/1042/problem/C

给你一个有n个元素序列,有两个操作:
1,选取a[i]和a[j],删除a[i],将$a[i]*a[j]$赋值给a[j]
2,任意选定一个数删除(只能做一次).
打印操作,让最后剩下的数最大。

题意还是比较好理解的。

我们可以想到我们需要先把所有的0,合为一个,然后判断负数两两配对是否多出一个(!%2),两两配对后,两个负数相乘变为正数,正数当然越乘越大。

如果多出一个来,因为要让乘积最大,那么对于负数而言,我们需要删掉最大的负数,将这个最大的负数和0进行1操作,然后删除0(删除两个数的乘积)。

如果负数为偶数,那么我们直接把0的位置,删掉就好了,将剩下的的乘起来。

这样大体的思想就出来了,要注意一大堆细节问题:

1.如果全是0,那么我们只进行1操作(n-1)次就好,做完return 0;

2.没有0,。

3.没有负数。

4.没有正数。

上边的四种情况在代码中都有体现:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
int cnt,cnt1,cnt2,n,x;
struct ahah
{
int x,pos;
} a[],b[],c[];
bool cmp(ahah a,ahah b){ return abs(a.x)<abs(b.x); }
int main()
{
scanf("%d",&n);
for(int i=; i<=n; i++)
{
scanf("%d",&x);
if(x==)c[++cnt].pos=i;
if(x<)a[++cnt1].x=x,a[cnt1].pos=i;
if(x>)b[++cnt2].x=x,b[cnt2].pos=i;
}
sort(a+,a++cnt1,cmp);
sort(b+,b++cnt2,cmp);
int v=-;
if(cnt!=)
{
v=c[].pos;
for(int i=; i<=cnt; i++)
{
printf("1 %d %d\n",v,c[i].pos);
v=c[i].pos;
}
}
if(cnt==n)return ;
if(cnt1%==)
{
if(v!=-)printf("2 %d\n",v),v=-;
if(cnt1!=)
{
if(v==-)v=a[].pos;
else printf("1 %d %d\n",v,a[].pos),v=a[].pos;
for(int i=; i<=cnt1; i++)
{
printf("1 %d %d\n",v,a[i].pos);
v=a[i].pos;
}
}
if(cnt2!=)
{
if(v==-)v=b[].pos;
else printf("1 %d %d\n",v,b[].pos),v=b[].pos;
for(int i=; i<=cnt2; i++)
{
printf("1 %d %d\n",v,b[i].pos);
v=b[i].pos;
}
}
}
else
{
if(v==-)v=a[].pos;
else printf("1 %d %d\n",v,a[].pos),v=a[].pos;
if(cnt+!=n)printf("2 %d\n",v),v=-;
else return ;
if(cnt1>)
{
v=a[].pos;
for(int i=; i<=cnt1; i++)
{
printf("1 %d %d\n",v,a[i].pos);
v=a[i].pos;
}
}
if(cnt2>)
{
if(v==-)v=b[].pos;
else printf("1 %d %d\n",v,b[].pos),v=b[].pos;
for(int i=; i<=cnt2; i++)
{
printf("1 %d %d\n",v,b[i].pos);
v=b[i].pos;
}
}
}
}

最新文章

  1. 在VC++6.0开发中实现全屏显示
  2. angularjs(一)基础概念
  3. Python (1) - 7 Steps to Mastering Machine Learning With Python
  4. sqoop将关系型的数据库得数据导入到hbase中
  5. JUnit 测试
  6. iOS边练边学--NSURLSession、NSURLSessionTask的介绍与使用以及url中包含了中文的处理方法
  7. C# 类中隐藏基类方法和Partial
  8. 用JSP+JavaBean开发模式实现一个销售额的查询
  9. JAVA的RSS处理
  10. JavaScript 版数据结构与算法(四)集合
  11. Laravel日常使用总结
  12. python 将一个列表去重,并且不打乱它原有的排列顺序
  13. php分割中文字符串为数组的简单例子
  14. Cracking The Coding Interview 9.1
  15. [UE4]小技巧:自动添加函数返回值
  16. PHP 验证IP的合法性
  17. Angular 2的表格控件
  18. Xcode 常用插件
  19. JSP_运维_JSP项目部署到server(适合0经验新手)
  20. [Command] lrzsz - 文件传输工具包

热门文章

  1. CF364D Ghd(随机化)
  2. -webkit-line-clamp 兼容性问题
  3. 关于MySQL集群架构优劣势与适用场景的分析与思考
  4. MyBatist庖丁解牛(一)
  5. go系列(5)- beego自己写controller
  6. [Python]&#39;unicodeescape&#39; codec can&#39;t decode bytes in position 2-3: truncated \UXXXXXXXX escape 错误
  7. windows下写的shell脚本到linux上不能运行
  8. 使用request实现手工输入验证码登录
  9. Spark无法创建新线程
  10. H5 之 Page Visibility