2019 ACM-ICPC 上海网络赛 B. Light bulbs (差分)
题目链接:Light bulbs
比赛链接:The Preliminary Contest for ICPC Asia Shanghai 2019
题意
给定 \(N\) 个灯泡 (编号从 $0$ 到 \(N - 1\)),初始都是关闭的。
给定 \(M\) 个操作,每个操作包含 \(L\) 和 \(R\),对 \([L, R]\) 内的所有灯泡改变状态。
求最后有几个灯泡是亮的。
思路
题目挺简单的,翻转奇数次的灯泡是亮的,所以要求每个灯泡翻转的次数。
容易想到可以用差分。
对所有操作的两个端点排序,求差分数组 \(d[]\)。
然后根据差分数组求前缀和,差分数组相邻两个数 \(d[l]\) 和 \(d[r]\) 所在的区间 \([l, r)\) 内的每个数都加上 \(d[l]\),那么如果 \(d[l]\) 为奇数,\(ans += (r - l)\)。时间复杂度 \(O(MlogM)\)。
于是就有了下面的代码。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6 + 10;
int pos[2010];
int main() {
int T;
scanf("%d", &T);
int kase = 0;
while(T--) {
int n, m;
scanf("%d%d", &n, &m);
vector<int> d(n + 10);
memset(pos, 0, sizeof(pos));
unordered_map<int, int> mp;
int cnt = 0;
for(int i = 1; i <= m; ++i) {
int l, r;
scanf("%d%d", &l, &r);
++d[l];
--d[r + 1];
if(mp[l] == 0) {
pos[cnt++] = l;
mp[l] = 1;
}
if(mp[r + 1] == 0) {
pos[cnt++] = r + 1;
mp[r + 1] = 1;
}
}
sort(pos, pos + cnt);
ll ans = 0;
for(int i = 1; i < cnt; ++i) {
if(d[pos[i - 1]] & 1) ans += pos[i] - pos[i - 1];
d[pos[i]] = d[pos[i - 1]] + d[pos[i]];
}
if(d[pos[cnt - 1]] & 1) ans += n - pos[cnt - 1];
printf("Case #%d: %lld\n", ++kase, ans);
}
return 0;
}
然后就 TLE 了。这题时间和空间卡的很紧。
AC 代码
用 map 存差分数组,还自动排序了。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6 + 10;
int main() {
int T;
scanf("%d", &T);
int kase = 0;
while(T--) {
int n, m;
scanf("%d%d", &n, &m);
map<int, int> d;
int cnt = 0;
for(int i = 1; i <= m; ++i) {
int l, r;
scanf("%d%d", &l, &r);
++d[l];
--d[r + 1];
}
ll ans = 0;
auto it = d.begin();
int p = it->first;
int v = it->second;
++it;
for(; it != d.end(); ++it) {
if(v & 1) ans += it->first - p;
it->second = v + it->second;
p = it->first;
v = it->second;
}
if(v & 1) ans += n - p;
printf("Case #%d: %lld\n", ++kase, ans);
}
return 0;
}
2019 ACM-ICPC 上海网络赛 B. Light bulbs (差分)的更多相关文章
- 2019年icpc上海网络赛 B Light bulbs (分块、差分)
https://nanti.jisuanke.com/t/41399 题目大意: 有n个灯,m次操作,每次修改[l,r]内的灯,(off - on ,on - off),问最后有几盏灯亮着. 换种说法 ...
- 2019 ICPC上海网络赛 A 题 Lightning Routing I (动态维护树的直径)
题目: 给定一棵树, 带边权. 现在有2种操作: 1.修改第i条边的权值. 2.询问u到其他一个任意点的最大距离是多少. 题解: 树的直径可以通过两次 dfs() 的方法求得.换句话说,到任意点最远的 ...
- HDU 4731 Minimum palindrome 2013 ACM/ICPC 成都网络赛
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4731 题解:规律题,我们可以发现当m大于等于3时,abcabcabc……这个串的回文为1,并且字典数最小 ...
- HDU 4734 F(x) 2013 ACM/ICPC 成都网络赛
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4734 数位DP. 用dp[i][j][k] 表示第i位用j时f(x)=k的时候的个数,然后需要预处理下小 ...
- HDU 4741 Save Labman No.004 2013 ACM/ICPC 杭州网络赛
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4741 题意:给你两条异面直线,然你求着两条直线的最短距离,并求出这条中垂线与两直线的交点. 需要注意的是 ...
- 2013 ACM/ICPC 成都网络赛解题报告
第三题:HDU 4730 We Love MOE Girls 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4730 水题~~~ #include < ...
- 2013 ACM/ICPC 长春网络赛E题
题意:给出一个字符串,要从头.尾和中间找出三个完全相等的子串,这些串覆盖的区间互相不能有重叠部分.头.尾的串即为整个字符串的前缀和后缀.问这个相同的子串的最大长度是多少. 分析:利用KMP算法中的ne ...
- 2013 ACM/ICPC 长春网络赛F题
题意:两个人轮流说数字,第一个人可以说区间[1~k]中的一个,之后每次每人都可以说一个比前一个人所说数字大一点的数字,相邻两次数字只差在区间[1~k].谁先>=N,谁输.问最后是第一个人赢还是第 ...
- 2013 ACM/ICPC 长沙网络赛J题
题意:一个数列,给出这个数列中的某些位置的数,给出所有相邻的三个数字的和,数列头和尾处给出相邻两个数字的和.有若干次询问,每次问某一位置的数字的最大值. 分析:设数列为a1-an.首先通过相邻三个数字 ...
随机推荐
- JS-动态加载
var s = document.createElement('script'); s.setAttribute('src', ''); s.setAttribute('type', 'text/ja ...
- 后台date类型转换为json字符串时,返回前台页面的是long类型的时间戳问题解决
学习springboot框架,写个博客系统,在后台管理的日志管理中,遇到了后台查询的日期格式的结果返回到页面变成了日期的时间戳了.然后摸索了三种方法来解决.页面的显示问题如下图. 问题页面回顾: 本案 ...
- java 实现一套流程管理、流转的思路(伪工作流) 【仅供参考】
转: java 实现一套流程管理.流转的思路(伪工作流) 在做某个管理项目时,被要求实现一套流程管理,比如请假的申请审批流程等,在参考了很多资料,并和同事讨论后,得到了一个自主实现的流程管理. 以下提 ...
- Spring MVC 常用注解 和session界面渲染取值
@RequestParams name 修饰当前形参的属性 value 和name属性一样 也是修饰当前属性 defaultValue 给属性设置一个默认值 默认属性 required 必备属性 1. ...
- .NET Core开源组件:后台任务利器之Hangfire 转载 https://www.cnblogs.com/chenug/p/6655636.html
.NET Core开源组件:后台任务利器之Hangfire 一.简述 Hangfire作为一款高人气且容易上手的分布式后台执行服务,支持多种数据库.在.net core的环境中,由Core自带的D ...
- XSS漏洞防护
主要是添加黑名单进行拦截 public class XSSFilter implements Filter { private final Log logger = LogFactory.getLog ...
- shell编程:字符串处理方式
字符串处理方式 计算字符串长度 获取子串在字符串中的索引位置 计算子串长度 抽取(截取)字串 1.计算字符串长度,有两种方式 $ ${#string} $ expr length "$str ...
- 好947 Mybatis 配置resultMap 带參数查询Map 注意selectOne数据库返回结果一条数据库 否则会报错
//TMD 写几个demo 还有大站採集 <a target=_blank href="http://hao947.com/" target="_blank&quo ...
- Vue_子级组件调用主组件函数
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- shell read变量