题目链接 :http://codeforces.com/contest/831/problem/C

题意 :选手有一个初始积分,接下来有k个裁判为他加分或减分(时间顺序给出),然后告诉你n(1<=n<=k)个积分减分过程中的积分(不一定是时间顺序),问根据这些信息,他的初始积分有多少种可能

分析 : 无论存在多少种,先明确一点,只要存在那么这n个分数肯定是能够找到自己的位置的(也就是每个分数是在哪个裁判给分之后的值)。那么我们就可以找其中一个出来,将其放在各个裁判判分之后的位置,有k个裁判,那就拥有k个位置,然后根据裁判给出的分数,我们能得到一个初始值,然后根据这个初始值和各个裁判的分数,就能知道其他的分数是否有合法的位置给它。实现的时候,由于在枚举每一个位置的时候需要知道前面裁判的给分总和,如果每一次都去计算,那就很浪费时间了,可以使用一个数组来保存裁判的分数,构成前缀和数组来辅助计算。同样再考虑一个问题,就是如果选出来的那一个记忆值放在哪个裁判后面都可以的话总共就是k种了吗?其实这里有一种情况,就是如果有裁判给出0分,那就会有至少一组相邻相同的前缀和,如果其中一个位置可行,那在相同的前缀和之下另一个也必定可行,可是得到的初始值是一样的,所以需要去重处理,可以将前缀和数组进行排序和然后使用unique去重。

#include<bits/stdc++.h>
using namespace std;
 + ;
int Sum[maxn], fir[maxn], sec[maxn];
int main(void)
{
    int n, k;
    scanf("%d %d", &n, &k);
    ; i<n; i++){
        scanf("%d", &fir[i]);
        Sum[i+] = Sum[i] + fir[i];///构造前缀和数组
    }
    sort(Sum+, Sum++n);
    ; i<k; i++) scanf("%d", &sec[i]);
    , Sum++n) - (Sum+);
    int ans = m;///去重后的元素个数作为答案基数,表示可以得到的最多种类数
    ; i<m; i++){
        ] - Sum[i+];///得到初始值
        ; j<k; j++){
            , Sum++n, sec[j]-Init_val)){
                ans--;
                break;
            }
        }
    }
    printf("%d\n", ans);
    ;
}

瞎 : 

①unique(arr, arr+n)实际进行的是伪去重,但是我们可以得到去掉重复元素之后最后一个有效元素的地址,因此去重之后的元素个数就是 unique(arr, arr+n) - arr,注意先排序。

②当频繁要进行有序的前缀求和计算或者需要对于各个前缀和进行特殊处理,要考虑提前进行处理然后存在数组中构成前缀和数组。

③暴力时候在有查找操作的时候,需要灵敏一点去想是否符合二分特性,加快计算。

#424 Div2 Problem C Jury Marks (二分 && 暴力 && std::unique && 思维)的更多相关文章

  1. #431 Div2 Problem B Tell Your World (鸽巢原理 && 思维)

    链接 : http://codeforces.com/contest/849/problem/B 题意 : 给出 n 个在直角坐标系上的点,每个点的横坐标的值对应给出的顺序序数,比如 1 2 4 3 ...

  2. Codeforces 778A:String Game(二分暴力)

    http://codeforces.com/problemset/problem/778/A 题意:给出字符串s和字符串p,还有n个位置,每一个位置代表删除s串中的第i个字符,问最多可以删除多少个字符 ...

  3. Codeforces831C Jury Marks

    C. Jury Marks time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  4. 【bzoj5085】最大 二分+暴力

    题目描述 给你一个n×m的矩形,要你找一个子矩形,价值为左上角左下角右上角右下角这四个数的最小值,要你最大化矩形的价值. 输入 第一行两个数n,m,接下来n行每行m个数,用来描述矩形 n, m ≤ 1 ...

  5. 【BZOJ4716】假摔 二分+暴力

    [BZOJ4716]假摔 Description [题目背景] 小Q最近喜欢上了一款游戏,名为<舰队connection>,在游戏中,小Q指挥强大的舰队南征北战,从而成为了一名dalao. ...

  6. #424 Div2 E

    #424 Div2 E 题意 给出一个 n 个数的数列,从前往后取数,如果第一个数是当前数列的最小值,则取出,否则将它放到数列尾端,问使数列为空需要多少步操作. 分析 用数据结构去模拟. 线段树维护区 ...

  7. #424 Div2 C

    #424 Div2 C 题意 给出 k 个分数,初始分数未知,按顺序把这 k 个分数加到初始分数上,已知 n 个加入分数后的结果(无序),问初始分数有多少种可能. 分析 也就是说这 n 个结果,它们之 ...

  8. C. Jury Marks

    C. Jury Marks time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  9. C. Jury Marks 思维

    C. Jury Marks 这个题目虽然是只有1600,但是还是挺思维的. 有点难想. 应该可以比较快的推出的是这个肯定和前缀和有关, x x+a1 x+a1+a2 x+a1+a2+a3... x+s ...

随机推荐

  1. mysql——单表查询——聚合函数——示例

    ), km ), cj ) ); select * from score; ,); ,); ,); ,); ,); ,); ,); ,); ,); ,); ,); ,); ; 查询此同学的总成绩: ; ...

  2. Akka系列(五):Java和Scala中的Future

    前言....... 随着CPU的核数的增加,异步编程模型在并发领域中的得到了越来越多的应用,由于Scala是一门函数式语言,天然的支持异步编程模型,今天主要来看一下Java和Scala中的Futrue ...

  3. sql盲注-笔记

     盲注是因为数据库查询的结果不会直接显示在页面.只能通过构造查询语句查看反馈的结果真&假状态来判断信息.   实际注入手法和回显注入区别不大 下面只记录相关思路   select length ...

  4. C语言作业09

    问题 答案 这个作业属于那个课程 C语言程序设计 这个作业要求在哪里 https://i.cnblogs.com/EditPosts.aspx?opt=1 我在这个课程的目标是 在学好C语言编程的基础 ...

  5. 通过U盘或CD/DVD装centos7,出现“dracut-initqueue timeout..."解决办法

    1.在用CD/DVD挂载centos7镜像安装系统时,出现“dracut-initqueue timeout...", :/# cd dev :/# ls 2.这是因为安装程序未能找到安装文 ...

  6. [转帖]VPS、虚拟主机、云主机的区别

    引用知乎网友通俗的例子解释: https://www.cnblogs.com/fjping0606/p/9993849.html 其实 应该是 vps 只是 单台物理机上面的虚拟机 云主机 可能是资源 ...

  7. AtCoder Beginner Contest 072

    这应该是我第二次打AtCoder, 题目其实并不难,就是自己经验不足想复杂了,再加上自己很笨,愣是做了97分钟才全做出来(最后三分钟,有点小激动..),看着前面大牛半个小时都搞完了,真心膜拜一下,代码 ...

  8. js 学习四 对象应用 吃货游戏

    游戏来源于 Mdn学习网站: 该例子用于对象的理解非常有效(建议看完上面网站的内容在开始练习) 弹球 body { margin: 0; overflow: hidden; font-family: ...

  9. java面试题全集(上)

    1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注 ...

  10. laravel5.8 表单验证

    'name' => 'required|unique:posts|max:255', // posts 表名 源码  vendor\laravel\framework\src\Illuminat ...