zoukankan      html  css  js  c++  java
  • [CF1077C]Good Array

    题目大意:一个序列是好的当且仅当有一个数是其它所有数的和,问一个序列可以删掉哪个数变成好的序列。输出所有方案。

    题解:发现等于其他数的和的那个数一定是其中最大的,只要排序一下(其实只要找到最大的两个数),就可以$O(1)$判断是否合法

    卡点:

    C++ Code:

    #include <cstdio>
    #include <vector>
    #include <algorithm>
    #define maxn 200010
    std::vector<int> ans;
    int n, s[maxn], rnk[maxn];
    long long sum;
    inline bool cmp(int a, int b) {return s[a] > s[b];}
    int main() {
    	scanf("%d", &n);
    	for (int i = 1; i <= n; i++) scanf("%d", s + i), rnk[i] = i, sum += s[i];
    	std::sort(rnk + 1, rnk + n + 1, cmp);
    	for (int i = 1; i <= n; i++) {
    		int MAX = i == 1 ? s[rnk[2]] : s[rnk[1]];
    		if (sum - s[rnk[i]] - MAX == static_cast<long long> (MAX)) {
    			ans.push_back(rnk[i]);
    		}
    	}
    	std::sort(ans.begin(), ans.end());
    	printf("%d
    ", ans.size());
    	for (std::vector<int>::iterator it = ans.begin(); it != ans.end(); it++) printf("%d ", *it);
    	puts("");
    	return 0;
    }
    

      

  • 相关阅读:
    稀疏矩阵解题数学库 -- UMFPACK
    国外程序猿整理的C++大全
    SQL实用语句大全
    this 三句话
    ELK 7.4.2 单机安装配置
    简单搭建DNS服务器——bind
    关于博客皮肤
    Golang 实现 array_push
    Golang 发送POST请求,加header头,带参数
    Golang 签名
  • 原文地址:https://www.cnblogs.com/Memory-of-winter/p/9984888.html
Copyright © 2011-2022 走看看