Array Product(模拟)
Array Product
http://codeforces.com/problemset/problem/1042/C
You are given an array aa consisting of nn integers. You can perform the following operations with it:
- Choose some positions ii and jj (1≤i,j≤n,i≠j1≤i,j≤n,i≠j), write the value of ai⋅ajai⋅aj into the jj-th cell and remove the number from the ii-th cell;
- Choose some position ii and remove the number from the ii-th cell (this operation can be performed no more than once and at any point of time, not necessarily in the beginning).
The number of elements decreases by one after each operation. However, the indexing of positions stays the same. Deleted numbers can't be used in the later operations.
Your task is to perform exactly n−1n−1 operations with the array in such a way that the only number that remains in the array is maximum possible. This number can be rather large, so instead of printing it you need to print any sequence of operations which leads to this maximum number. Read the output format to understand what exactly you need to print.
Input
The first line contains a single integer nn (2≤n≤2⋅1052≤n≤2⋅105) — the number of elements in the array.
The second line contains nn integers a1,a2,…,ana1,a2,…,an (−109≤ai≤109−109≤ai≤109) — the elements of the array.
Output
Print n−1n−1 lines. The kk-th line should contain one of the two possible operations.
The operation of the first type should look like this: 1 ik jk1 ik jk, where 11 is the type of operation, ikik and jkjk are the positions of the chosen elements.
The operation of the second type should look like this: 2 ik2 ik, where 22 is the type of operation, ikik is the position of the chosen element. Note that there should be no more than one such operation.
If there are multiple possible sequences of operations leading to the maximum number — print any of them.
Examples
5
5 -2 0 1 -3
2 3
1 1 2
1 2 4
1 4 5
5
5 2 0 4 0
1 3 5
2 5
1 1 2
1 2 4
2
2 -1
2 2
4
0 -10 0 0
1 1 2
1 2 3
1 3 4
4
0 0 0 0
1 1 2
1 2 3
1 3 4
Note
Let X be the removed number in the array. Let's take a look at all the examples:
The first example has, for example, the following sequence of transformations of the array: [5,−2,0,1,−3]→[5,−2,X,1,−3]→[X,−10,X,1,−3]→[5,−2,0,1,−3]→[5,−2,X,1,−3]→[X,−10,X,1,−3]→ [X,X,X,−10,−3]→[X,X,X,X,30][X,X,X,−10,−3]→[X,X,X,X,30]. Thus, the maximum answer is 3030. Note, that other sequences that lead to the answer 3030 are also correct.
The second example has, for example, the following sequence of transformations of the array: [5,2,0,4,0]→[5,2,X,4,0]→[5,2,X,4,X]→[X,10,X,4,X]→[5,2,0,4,0]→[5,2,X,4,0]→[5,2,X,4,X]→[X,10,X,4,X]→ [X,X,X,40,X][X,X,X,40,X]. The following answer is also allowed:
1 5 3
1 4 2
1 2 1
2 3
Then the sequence of transformations of the array will look like this: [5,2,0,4,0]→[5,2,0,4,X]→[5,8,0,X,X]→[40,X,0,X,X]→[5,2,0,4,0]→[5,2,0,4,X]→[5,8,0,X,X]→[40,X,0,X,X]→ [40,X,X,X,X][40,X,X,X,X].
The third example can have the following sequence of transformations of the array: [2,−1]→[2,X][2,−1]→[2,X].
The fourth example can have the following sequence of transformations of the array: [0,−10,0,0]→[X,0,0,0]→[X,X,0,0]→[X,X,X,0][0,−10,0,0]→[X,0,0,0]→[X,X,0,0]→[X,X,X,0].
The fifth example can have the following sequence of transformations of the array: [0,0,0,0]→[X,0,0,0]→[X,X,0,0]→[X,X,X,0][0,0,0,0]→[X,0,0,0]→[X,X,0,0]→[X,X,X,0].
简单的模板,要注意的就是只能删除一次
杂乱无章的代码。。。
#include <iostream>
#include<vector>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std; int a[];
vector<pair<int,int> >zheng,fu,ling; int main(){
std::ios::sync_with_stdio(false);
int n;
cin>>n;
set<int>s;
for(int i=;i<=n;i++){
cin>>a[i];
if(a[i]==){
ling.push_back(make_pair(a[i],i));
}
else if(a[i]>){
zheng.push_back(make_pair(a[i],i));
}
else{
fu.push_back(make_pair(a[i],i));
} }
if((zheng.size()==)&&(ling.size()>=)&&(fu.size()==)){
for(int i=;i<=n;i++){
cout<<<<" "<<i-<<" "<<i<<endl;
}
return ;
}
if((zheng.size()==)&&(fu.size()==)){
for(int i=;i<ling.size();i++){
cout<<<<" "<<ling[i-].second<<" "<<ling[i].second<<endl;
}
return ;
}
if(fu.size()>){
sort(fu.begin(),fu.end());
}
int tmp1=-,tmp2=-,tmp3=-,tmp4=-;
int fulen;
if(fu.size()>){
fulen=fu.size();
if(fu.size()%){
fulen--;
tmp4=fu[fulen].second;
}
for(int i=;i<fulen;i++){
cout<<<<" "<<fu[i-].second<<" "<<fu[i].second<<endl;
}
if(fu.size()==fulen)
tmp1=fu[fulen-].second;
else if(fulen)
tmp1=fu[fulen-].second;
}
if(ling.size()>){
for(int i=;i<ling.size();i++){
cout<<<<" "<<ling[i-].second<<" "<<ling[i].second<<endl;
}
tmp2=ling[ling.size()-].second;
}
if(zheng.size()>){
for(int i=;i<zheng.size();i++){
cout<<<<" "<<zheng[i-].second<<" "<<zheng[i].second<<endl;
}
tmp3=zheng[zheng.size()-].second;
}
if(tmp2!=-&&tmp4!=-){
cout<<<<" "<<tmp2<<" "<<tmp4<<endl;
cout<<<<" "<<tmp4<<endl;
}
else if(tmp2==-&&tmp4!=-){
cout<<<<" "<<tmp4<<endl;
}
else if(tmp2!=-&&tmp4==-){
cout<<<<" "<<tmp2<<endl;
}
if(tmp1!=-&&tmp3!=-){
cout<<<<" "<<tmp1<<" "<<tmp3<<endl;
}
}
Array Product(模拟)的更多相关文章
- CF1042C Array Product(贪心,模拟)
题目描述 You are given an array aa consisting of nn integers. You can perform the following operations w ...
- CodeForces ---596B--Wilbur and Array(贪心模拟)
Wilbur and Array Time Limit: 2000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Su ...
- hdu 5532 Almost Sorted Array(模拟)
Problem Description We are all familiar with sorting algorithms: quick sort, merge sort, heap sort, ...
- CodeForce 439C Devu and Partitioning of the Array(模拟)
Devu and Partitioning of the Array time limit per test 1 second memory limit per test 256 megabytes ...
- Educational Codeforces Round 52D(ARRAY,模拟最短路)
#include<bits/stdc++.h>using namespace std;int n,x;int chess[17*17];//记录棋盘上的numberarray<int ...
- Codeforces 950D A Leapfrog in the Array ( 思维 && 模拟 )
题意 : 给出 N 表示有标号 1~N 的 N 个数,然后从下标 1 开始将这 N 个数每隔一位放置一个,直到 N 个数被安排完,现在有一个操作就是每次将数列中最右边的数向离其左边最近的空缺处填上,一 ...
- Beauty of Array(模拟)
M - M Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Submit Status P ...
- codeforces 1042c// Array Product// Codeforces Round #510(Div. 2)
题意:给出一个数组,2种操作:.1:x*y然后x消失,2:除掉x(2操作最多只能进行一次).问最大的结果的一种操作方式.逻辑题,看能不能想全面. 1先数好0,正,负的数量,zero,pos,neg.如 ...
- CF1042C Array Product 分类讨论+贪心
考虑有无负数(负数的个数为奇视作“有”,否则为“无”)和有无零 无负数无零,全部合并即可 无负数有零,那么把零合并起来,删掉零 有负数无零,把最大的负数找出来,删掉,合并剩余的数 有负数有零,把零和最 ...
随机推荐
- AspectJ入门
AOP的实现方式有两种: AOP框架在编译阶段,就对目标类进行修改,得到的class文件已经是被修改过的.生成静态的AOP代理类(生成*.class文件已经被改掉了,需要使用特定的编译器).以Aspe ...
- POJ 3268 Silver Cow Party 最短路径+矩阵转换
Silver Cow Party Time Limit : 4000/2000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) T ...
- 常用命名_html
以下为于页面模块的常用命名 头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrappe ...
- Mybatis 接口绑定
MyBatis的接口绑定: 参考链接:http://blog.csdn.net/chris_mao/article/details/48836039 接口映射就是在IBatis中任意定义接口,然后把接 ...
- 第3章 文件I/O(4)_dup、dup2、fcntl和ioctl函数
5. 其它I/O系统调用 (1)dup和dup2函数 头文件 #include<unistd.h> 函数 int dup(int oldfd); int dup2(int oldfd, i ...
- storm项目架构分析
storm是一条一条数据处理,spark是一批数据处理的,storm才是真正意义的实时数据处理. 1.fileBeat类似flume用来采集日志的,fileBeat是轻量级的,对性能消化不大,而flu ...
- hibernate vs ibatis
主要通过 灵活性,性能,开发速度 三个角度来看 1.ibatis非常简单易学,hibernate相对较复杂,门槛较高. 2.二者都是比较优秀的开源产品 3.当系统属于二次开发,无法对数据库结构做到 ...
- python的动态性和_slot_
python是动态语言 1. 动态语言的定义 动态编程语言 是 高级程序设计语言 的一个类别,在计算机科学领域已被广泛应用.它是一类 在运行时可以改变其结构的语言 :例如新的函数.对象.甚至代码可以被 ...
- 折腾了几个小时,分享下zendstudio10的git使用
今天打开zend10,发现新建项目的地方有 from git,from github,就试了试,发现可以导出,也可以commit,但是没办法push. 就百度百度,发现zendstudio10的git ...
- CUDA C Programming Guide 在线教程学习笔记 Part 1
1. 简介 2. 编程模型 ▶ SM version 指的是硬件构架和特性,CUDA version 指的是软件平台版本. 3. 编程接口.参考 http://chenrudan.github.io/ ...