CF1042C Array Product 分类讨论+贪心

考虑有无负数(负数的个数为奇视作“有”,否则为“无”)和有无零
无负数无零,全部合并即可
无负数有零,那么把零合并起来,删掉零
有负数无零,把最大的负数找出来,删掉,合并剩余的数
有负数有零,把零和最大的负数合并起来,删掉,合并剩余的数
注意如果只剩下一个数,不能删掉这唯一的一个数
#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
namespace remoon {
#define ri register int
#define ll long long
#define tpr template <typename ra>
#define rep(iu, st, ed) for(ri iu = st; iu <= ed; iu ++)
#define drep(iu, ed, st) for(ri iu = ed; iu >= st; iu --)
#define gc getchar
inline int read() {
int p = , w = ; char c = gc();
while(c > '' || c < '') { if(c == '-') w = -; c = gc(); }
while(c >= '' && c <= '') p = p * + c - '', c = gc();
return p * w;
}
int wr[], rw;
#define pc(iw) putchar(iw)
tpr inline void write(ra o, char c = '\n') {
if(!o) pc('');
if(o < ) o = -o, pc('-');
while(o) wr[++ rw] = o % , o /= ;
while(rw) pc(wr[rw --] + '');
pc(c);
}
tpr inline void cmin(ra &a, ra b) { if(a > b) a = b; }
tpr inline void cmax(ra &a, ra b) { if(a < b) a = b; }
tpr inline bool ckmin(ra &a, ra b) { return (a > b) ? a = b, : ; }
tpr inline bool ckmax(ra &a, ra b) { return (a < b) ? a = b, : ; }
}
using namespace std;
using namespace remoon;
#define sid 300050 int n, a[sid]; inline void Solve1() {
rep(i, , n) printf("1 %d %d\n", i, );
} inline void Solve2() { int mip = -1e9 - , pos = ;
rep(i, , n)
if(a[i] < && ckmax(mip, a[i])) pos = i; int fir = -;
rep(i, , n) if(pos != i) { fir = i; break; }
if(fir == -) return; printf("2 %d\n", pos);
if(pos != ) {
rep(i, , n)
if(pos != i) printf("%d %d %d\n", , i, );
}
else rep(i, , n) printf("%d %d %d\n", , i, ); } inline void Solve3() { int lst = -;
rep(i, , n) if(a[i] == ) {
if(lst != -) printf("%d %d %d\n", , lst, i);
lst = i;
} int fir = -;
rep(i, , n) if(a[i] != ) { fir = i; break; }
if(fir == -) return; printf("2 %d\n", lst);
rep(i, fir + , n) if(a[i] != )
printf("%d %d %d\n", , i, fir); } inline void Solve4() { int mip = -1e9 - , pos = ;
rep(i, , n)
if(a[i] < && ckmax(mip, a[i])) pos = i; int lst = -;
rep(i, , n) if(a[i] == || pos == i) {
if(lst != -) printf("%d %d %d\n", , lst, i);
lst = i;
} int fir = -;
rep(i, , n) if(a[i] != && pos != i)
{ fir = i; break; }
if(fir == -) return; printf("2 %d\n", lst);
rep(i, fir + , n) if(a[i] != && pos != i)
printf("%d %d %d\n", , i, fir); } int main() { n = read();
rep(i, , n) a[i] = read(); int neg = , zero = ;
rep(i, , n) if(a[i] < ) neg ^= ;
else if(a[i] == ) zero |= ; if(!zero && !neg) Solve1();
else if(!zero && neg) Solve2();
else if(zero && !neg) Solve3();
else if(zero && neg) Solve4(); return ;
}
CF1042C Array Product 分类讨论+贪心的更多相关文章
- AtCoder Beginner Contest 173 E Multiplication 4 分类讨论 贪心
LINK:Multiplication 4 害怕别人不知道我有多菜 那就上张图: 赛时 太慌了 (急着AK 题目不难却暴露我的本性 根本不思考无脑写 wa了还一直停不下来的debug 至少被我发现了1 ...
- CF1042C Array Product(贪心,模拟)
题目描述 You are given an array aa consisting of nn integers. You can perform the following operations w ...
- ACM学习历程—UVALive 7147 World Cup(分类讨论 && 贪心)
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- Acwing 社交距离 分类讨论+贪心
一种新型疾病,COWVID-19,开始在全世界的奶牛之间传播. Farmer John 正在采取尽可能多的预防措施来防止他的牛群被感染. Farmer John 的牛棚是一个狭长的建筑物,有一排共 N ...
- Educational Codeforces Round 63 (Rated for Div. 2) D. Beautiful Array 分类讨论连续递推dp
题意:给出一个 数列 和一个x 可以对数列一个连续的部分 每个数乘以x 问该序列可以达到的最大连续序列和是多少 思路: 不是所有区间题目都是线段树!!!!!! 这题其实是一个很简单的dp 使用的是分 ...
- Codeforces 460D Little Victor and Set --分类讨论+构造
题意:从区间[L,R]中选取不多于k个数,使这些数异或和尽量小,输出最小异或和以及选取的那些数. 解法:分类讨论. 设选取k个数. 1. k=4的时候如果区间长度>=4且L是偶数,那么可以构造四 ...
- BZOJ-1067 降雨量 线段树+分类讨论
这道B题,刚的不行,各种碎点及其容易忽略,受不鸟了直接 1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 2859 ...
- UVaLive 6862 Triples (数学+分类讨论)
题意:给定一个n和m,问你x^j + y^j = z^j 的数量有多少个,其中0 <= x <= y <= z <= m, j = 2, 3, 4, ... n. 析:是一个数 ...
- 枚举(分类讨论):BZOJ 1177: [Apio2009]Oil
1177: [Apio2009]Oil Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 1477 Solved: 589[Submit] Descri ...
随机推荐
- mysql优化【转】
最近听讲了博森瑞老师的mysql优化公开课,这个是我整理的笔记. 现在说一下mysql的内存和I/O方面的两个特点. 一. mysql内存特点: 1. 也有全局内存和每个session的内存(每个s ...
- 浅谈mysql配置优化和sql语句优化【转】
做优化,我在这里引用淘宝系统分析师蒋江伟的一句话:只有勇于承担,才能让人有勇气,有承担自己的错误的勇气.有承担错误的勇气,就有去做事得勇气.无论做什么事,只要是对的,就要去做,勇敢去做.出了错误,承担 ...
- 教你用DrawLayout 实现Android 侧滑菜单
现在的APP越来越注重用户体验,百度视频客户端有一个特效还是挺吸引人的,在主界面手指向右滑动,就可以将菜单展示出来,而主界面会被隐藏大部分,但是仍有左侧的一小部分同菜单一起展示.类似的还有天天动听,人 ...
- python基础--xml和configparse模块
1)XML模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多. 下面是xml的遍历查询删除修改和生成 # -*- coding:utf-8 -*- __author__ = 's ...
- python网络编程--线程使用threading
一:线程使用 线程使用有两种方法,一种是直接使用,二是通过继承threading.Thread类使用 二:函数式使用 函数式:调用thread模块中的start_new_thread()函数来产生新线 ...
- day04作业
1.for(初始化表达式:条件表达式:循环后的操作表达式){ 循环体: } class Test_Sum { public static void main(String[] args) { int ...
- java基础24 线程、多线程及线程的生命周期(Thread)
1.1.进程 正在执行的程序称作为一个进程.进程负责了内存空间的划分 疑问1:windows电脑称之为多任务的操作系统,那么Windows是同时运行多个应用程序呢? 从宏观的角度:windows确实在 ...
- git —— 异常1,index.lock
git提交过程中出现的问题 解决方法:找到 index.lock文件将其删除 一般 index.lock 在.git下面, 有时 .git 是隐藏的,但是无论怎样, 可以通过 everything 找 ...
- No.2 selenium学习之路之八种基本定位
selenium的八种定位方式 1.通过id定位 find_element_by_id() send_keys() 输入框输入字符串 click() 鼠标点击事件 注:send_keys输入 ...
- 洛谷P1342请柬
传送门啦 核心思想:两遍最短路. 1号点去各地的时间直接套最短路模板,各地到1号点时间用逆向思维,视为求1号点沿反边到各地的时间即可. #include <iostream> #inclu ...