zoukankan      html  css  js  c++  java
  • Codeforces 1042C (贪心+模拟)

    题面

    传送门

    分析

    思路简单,但代码较复杂的贪心
    分类讨论:

    • 有0
      • 负数有奇数个:将绝对值最小(实际最大)的负数和0全部乘到一起,最后删掉0
      • 负数有偶数个:将0全部乘到一起,最后删掉0
    • 没有0
      • 负数有奇数个:将绝对值最小(实际最大)的负数删掉
      • 负数有偶数个:不删
        最后把剩下的数依次乘在一起即可

    代码

    
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<vector>
    #define maxn 200005
    #define INF 0x7fffffff
    using namespace std;
    int n;
    long long a[maxn];
    struct oper {
    	int type;
    	int i;
    	int j;
    	oper() {
    
    	}
    	oper(int x,int y,int z) {
    		type=x;
    		i=y;
    		j=z;
    	}
    	void print() {
    		if(type==1) {
    			printf("%d %d %d
    ",type,i,j);
    		} else {
    			printf("%d %d
    ",type,i);
    		}
    	}
    };
    vector<int>zeros;
    vector<oper>res;
    int main() {
    	scanf("%d",&n);
    	for(int i=1; i<=n; i++) {
    		scanf("%I64d",&a[i]);
    	}
    	int cntneg=0,cnt0=0;
    	long long maxneg=-INF;
    	int del=0;
    	for(int i=1; i<=n; i++) {
    		if(a[i]==0) {
    			zeros.push_back(i);//记录0的位置
    			cnt0++;
    		} else if(a[i]<0) {
    			cntneg++;
    			if(a[i]>maxneg) {
    				maxneg=a[i];
    				del=i;//记录最大的负数的位置
    			}
    		}
    	}
    	for(int i=0;i<cnt0-1;i++){
    		res.push_back(oper(1,zeros[i],zeros[i+1]));//将0全部挪到一起
    	}
    	if(cntneg%2==1){//分类讨论
    		if(cnt0!=0) res.push_back(oper(1,del,zeros[cnt0-1])),res.push_back(oper(2,zeros[cnt0-1],0));
    		else res.push_back(oper(2,del,0));
    	}else if(cnt0!=0) res.push_back(oper(2,zeros[cnt0-1],0));
    	int last=0;
    	for(int i=1; i<=n; i++) {
    		if(a[i]!=0) {
    			if(cntneg%2==1&&i==del) continue;
    			else if(last==0) {
    				last=i;
    				continue;
    			} else res.push_back(oper(1,last,i));
    			last=i;
    		}
    	}
    	for(int i=0; i<n-1; i++) {
    		res[i].print();
    	}
    }
    
  • 相关阅读:
    750. Number Of Corner Rectangles
    [Project Euler] 3. Largest Prime factor
    [Project Euler] 2. Even Fibonacci numbers
    Jmeter学习笔记3-参数化
    SQL多表连接查询补充
    Jmeter学习笔记2-原件作用域与执行顺序
    Jmeter学习笔记1-实践介绍
    运用badboy录制jmeter脚本
    【SQL提数】左连接使用
    【功能测试技巧2】dubbo引起的数据精度的思考
  • 原文地址:https://www.cnblogs.com/birchtree/p/9858035.html
Copyright © 2011-2022 走看看