#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 ...
随机推荐
- selenium—隐式等待和显式等待
一.隐式等待和显式等待的区别 隐式等待:是整个页面的等待.设置一个最长的等待时间,在规定时间内整个页面加载完成,则执行下一步,否则继续等待直到最长等待时间结束. 显式等待:是针对某个元素的等待.在设置 ...
- 阿里云安装filezilla
1.连接服务器 ssh 或者 远程连接 到服务器: 2.安装相应软件 安装EPEL,EPEL是yum的一个软件源,里面包含了许多基本源里没有的软件: yum -y install epel-relea ...
- 委托、泛型委托、多播委托、匿名函数、lamda表达式、事件
1.为什么要使用委托 将一个方法作为参数传递给另一个方法 2.委托概念 public delegate int 委托名(int a, int b); 声明一个委托类型,可以用访问修饰符修饰,deleg ...
- [codeforces1234F]Yet Another Substring Reverse
题目链接 大致题意为将某个子串进行翻转后,使得不包含相同字符的字符子串长度最长.只能翻转一次或零次. 设一个子串的状态为包含字符的二进制.如子串为$abacd$,则状态为$00000000000000 ...
- 创建一个py文件并运行
在 Linux 中,可以直接用vim 或者 vi 来编辑一个 python 文件 vim hello.py 进入编辑页面 #coding:utf-8 print("你好") (因为 ...
- Ubantu问题记录
2019.4.21Ubantu问题:常用命令:sudo是一种权限管理机制,依赖于/etc/sudoers,定义了授权给哪个用户可以以管理员的身份执行管理命令格式:sudo -u USERNAME CO ...
- redis 列表 数据类型
列表 rpush dname 技术部 后勤部 售后部 lpush dname 秘书部 lset dname 2 销售部 修改 lrange dname 0 -1 打印所有列表 ...
- ActionsChains类鼠标事件和Keys类键盘事件
一.鼠标事件 如,移动.点击.释放.单击.右击,拖动等 键盘事件如:输入.回车.粘贴.复制.剪贴等 使用ActionsChains类和Keys类之前都必须先导入 from selenium ...
- 关于encodeURI() 踩的坑
情景: 列表页跳转详情页,需要把列表页的数据带到详情页直接展示,思路是在路径后面加?传参,然后再在详情页获取url的参数. 为了以防中文乱码什么的所以先试用encodeURI转码再decodeURI解 ...
- 史上最简单JS复制功能,兼容安卓ios!
1.JS复制原理: 被复制内容的元素不能被其他元素遮盖,否则无效. (设置opacity透明为0,不可以设置display:none); 2.常规的复制方法 function copyUrl2() ...