#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 ...
随机推荐
- 【VS开发】浅谈UDP(数据包长度,收包能力,丢包及进程结构选择)
UDP数据包长度 UDP数据包的理论长度 udp数据包的理论长度是多少,合适的udp数据包应该是多少呢?从TCP-IP详解卷一第11章的udp数据包的包头可以看出,udp的最大包长度是2^16-1的个 ...
- Spring MVC 启动报错
Tomcat 启动Spring MVC工程报如下错误 java.lang.ClassNotFoundException: org.springframework.web.context.Context ...
- A9-USART2_RX_BUF 串口2收发异常
a9_send_cmd(); //退出透传模式,和前一次发送时间超过 2 秒,输入+++,就可以退出透传模式 delay_ms(); delay_ms(); delay_ms(); a9_quit_t ...
- HDU-5201 The Monkey King
题目描述 \(m\)个猴子分\(n\)个桃,要求第一个猴子的桃数严格大于其他猴子,问有多少种分法对\(1e9+7取模(\%1e9+7)\) Input \(1≤T≤25 ,1≤n,m≤100000\) ...
- Ubuntu下Win10虚拟机卡顿问题解决
问题描述 Ubuntu下用VMware创建了一个Windows10的虚拟机,初始给的配置如下: Memory: 4GB Graphics Memory: 1GB Hard Disk: 60GB 用的时 ...
- mysql-5.7.25安装以及使用
1. wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz 2. ...
- 一遍记住 8 种排序算法与 Java 代码实现
☞ 程序员进阶必备资源免费送「21种技术方向!」 ☜ 作者:KaelQ, www.jianshu.com/p/5e171281a387 1.直接插入排序 经常碰到这样一类排序问题:把新的数据插入到已经 ...
- group by问题
在使用group by进行查询结果分组的时候,报错: 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contain ...
- 初探CSS - 5 创建
CSS 创建 当读到一个样式表时,浏览器会根据它来格式化 HTML 文档. 如何插入样式表 插入样式表的方法有三种: 外部样式表(External style sheet) 内部样式表(Interna ...
- java面试题全集(下)
这部分主要是开源Java EE框架方面的内容,包括Hibernate.MyBatis.Spring.Spring MVC等,由于Struts 2已经是明日黄花,在这里就不讨论Struts 2的面试 ...