#424 Div2 Problem C Jury Marks (二分 && 暴力 && std::unique && 思维)
题目链接 :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 && 思维)的更多相关文章
- #431 Div2 Problem B Tell Your World (鸽巢原理 && 思维)
链接 : http://codeforces.com/contest/849/problem/B 题意 : 给出 n 个在直角坐标系上的点,每个点的横坐标的值对应给出的顺序序数,比如 1 2 4 3 ...
- Codeforces 778A:String Game(二分暴力)
http://codeforces.com/problemset/problem/778/A 题意:给出字符串s和字符串p,还有n个位置,每一个位置代表删除s串中的第i个字符,问最多可以删除多少个字符 ...
- Codeforces831C Jury Marks
C. Jury Marks time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- 【bzoj5085】最大 二分+暴力
题目描述 给你一个n×m的矩形,要你找一个子矩形,价值为左上角左下角右上角右下角这四个数的最小值,要你最大化矩形的价值. 输入 第一行两个数n,m,接下来n行每行m个数,用来描述矩形 n, m ≤ 1 ...
- 【BZOJ4716】假摔 二分+暴力
[BZOJ4716]假摔 Description [题目背景] 小Q最近喜欢上了一款游戏,名为<舰队connection>,在游戏中,小Q指挥强大的舰队南征北战,从而成为了一名dalao. ...
- #424 Div2 E
#424 Div2 E 题意 给出一个 n 个数的数列,从前往后取数,如果第一个数是当前数列的最小值,则取出,否则将它放到数列尾端,问使数列为空需要多少步操作. 分析 用数据结构去模拟. 线段树维护区 ...
- #424 Div2 C
#424 Div2 C 题意 给出 k 个分数,初始分数未知,按顺序把这 k 个分数加到初始分数上,已知 n 个加入分数后的结果(无序),问初始分数有多少种可能. 分析 也就是说这 n 个结果,它们之 ...
- C. Jury Marks
C. Jury Marks time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- C. Jury Marks 思维
C. Jury Marks 这个题目虽然是只有1600,但是还是挺思维的. 有点难想. 应该可以比较快的推出的是这个肯定和前缀和有关, x x+a1 x+a1+a2 x+a1+a2+a3... x+s ...
随机推荐
- 深入理解java:4.2. 框架编程之Spring框架的设计理念
什么是Spring呢? Spring是为了解决企业应用开发的复杂性而创建的一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. Spring优点 简单了解Spring之后,我们看一下Spri ...
- java中变量的线程安全性
静态变量:线程非安全.静态变量即类变量,位于方法区,为所有对象共享,共享一份内存,一旦静态变量被修改,其他对象均对修改可见,故线程非安全.实例变量:单例模式(只有一个对象实例存在)线程非安全,非单例线 ...
- 20191209 Linux就该这么学(6)
6. 存储结构与磁盘划分 6.1 一切从"/"开始 Linux 系统中的一切文件都是从"根(/)"目录开始的,并按照文件系统层次化标准(FHS)采用树形结构来存 ...
- ubuntu下python3虚拟环境的配置
安装相关包 sudo pip3 install virtualenv # 虚拟环境包 sudo pip3 install virtualenvwrapper # 虚拟环境管理包 创建虚拟环境目录 su ...
- 10.jQuery之停止动画排队stop方法(重点)
重点:stop,在实际项目中,这个细节很重要 <style> * { margin: 0; padding: 0; } li { list-style-type: none; } a { ...
- Jquery复习(五)之append()、appendTo()、prepend()、prependTo()、after()、before()易忘点
添加元素的方法 append().appendTo().prepend().prependTo().after().before() 通过 append() .appendTo().prepend() ...
- wex5 如何在js中给data添加数据
var options = { defaultValues :[ {'xuetang' : xuetang,'time' : time} ] }; this.comp("xuetangDat ...
- Host xxx is not allowed to connect to this MariaDb server
直接复制代码,无需修改 第一:// %:表示从任何主机连接到mysql服务器 GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'pass ...
- easyui,获取tabs标签页内容,以及刷新datagrid
因为先点开tab页xxx查看表格,再点另一个tab页xxxx修改部分信息,再切换到tab页xxx,tab页xxx里的datagrid表格不会刷新,显示不了修改的信息(在此tab页按F5刷新可以解决,但 ...
- var与let变量for遍历的问题
var Liarry = document.getElementsByTagName('li'); /**方法一*描述:自执行函数,将变量当参数传入(闭包的思想,保存当前的值).*/ for (var ...