C. Painting the Fence
链接
[https://codeforces.com/contest/1132/problem/C]
题意
就是有个n长的栅栏,然后每个油漆工可以染的区域不同
给你q让你选出q-2个人使得被染色的栅栏最多
分析
一开始一直想着用dp,就是那个状态转移无法搞。
后面是看别人的思路才发现,暴力就可以了,具体看代码
O(n*q)复杂度。还是太菜了
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=5e3+10;
int l[N],r[N],pre[N],cnt[N];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
//freopen("in.txt","r",stdin);
int n,q;
while(cin>>n>>q){
memset(cnt,0,sizeof(cnt));
memset(pre,0,sizeof(pre));
for(int i=1;i<=q;i++){
cin>>l[i]>>r[i];
for(int j=l[i];j<=r[i];j++)//统计每个点被覆盖的次数
cnt[j]++;
}
int ans=0;
//很关键的前缀和优化
for(int i=1;i<=q;i++){
int sum=0;
for(int j=l[i];j<=r[i];j++)//枚举要消除某一段
cnt[j]--;
for(int j=1;j<=n;j++){
// pre[j]表示从第一个到j这位置有多少个位置被覆盖一次
if(cnt[j]==1) pre[j]=pre[j-1]+1;
// 因为只有被覆盖一次的点在第二次去掉才会有影响
else pre[j]=pre[j-1];
if(cnt[j]) sum++;
//sum统计去掉一段后剩下的覆盖位置
}
for(int j=i+1;j<=q;j++)
ans=max(ans,sum-(pre[r[j]]-pre[l[j]-1]));
for(int j=l[i];j<=r[i];j++)//恢复第一被消除的那段
cnt[j]++;
}
cout<<ans<<endl;
}
return 0;
}
C. Painting the Fence的更多相关文章
- [luogu P2205] [USACO13JAN]画栅栏Painting the Fence
[luogu P2205] [USACO13JAN]画栅栏Painting the Fence 题目描述 Farmer John has devised a brilliant method to p ...
- 洛谷 画栅栏Painting the Fence 解题报告
P2205 画栅栏Painting the Fence 题目描述 \(Farmer\) \(John\) 想出了一个给牛棚旁的长围墙涂色的好方法.(为了简单起见,我们把围墙看做一维的数轴,每一个单位长 ...
- Painting The Fence(贪心+优先队列)
Painting The Fence(贪心+优先队列) 题目大意:给 m 种数字,一共 n 个,从前往后填,相同的数字最多 k 个在一起,输出构造方案,没有则输出"-1". 解题思 ...
- Painting the Fence Gym - 101911E(构造)
There is a beautiful fence near Monocarp's house. The fence consists of nn planks numbered from left ...
- CodeForces-1132C Painting the Fence
题目链接 https://vjudge.net/problem/CodeForces-1132C 题面 Description You have a long fence which consists ...
- 洛谷——P2205 [USACO13JAN]画栅栏Painting the Fence
题目描述 Farmer John has devised a brilliant method to paint the long fence next to his barn (think of t ...
- Educational Codeforces Round 61 (Rated for Div. 2)-C. Painting the Fence 前缀和优化
题意就是给出多个区间,要求去掉两个区间,使得剩下的区间覆盖范围最大. 当然比赛的时候还是没能做出来,不得不佩服大佬的各种姿势. 当时我想的是用线段树维护区间和,然后用单点判0,维护区间间断个数.然后打 ...
- Educational Codeforces Round 61 Editorial--C. Painting the Fence
https://codeforces.com/contest/1132/problem/C 采用逆向思维,要求最大的覆盖,就先求出总的覆盖,然后减去删除两个人贡献最少的人 #include<io ...
- Gym 101911E "Painting the Fence"(线段树区间更新+双端队列)
传送门 题意: 庭院中有 n 个围栏,每个围栏上都被涂上了不同的颜色(数字表示): 有 m 条指令,每条指令给出一个整数 x ,你要做的就是将区间[ x第一次出现的位置 , x最后出现的位置 ]中的围 ...
随机推荐
- [Hive_add_4] Hive 命令行客户端 Beeline 的使用
0. 说明 Hive 命令行客户端 beeline 的使用,建立在启动 Hadoop 集群和启动 hiveserver2 的基础之上 1. 使用指南 在确保集群启动和 hiveserver2 启动的 ...
- MySql基本使用方法
一,基本概念 1, 常用的两种引擎: (1) InnoDB a,支持ACID,简单地说就是支持事务完整性.一致性: b,支持行锁,以及类似ORACLE的一 ...
- LeetCode算法题-Ugly Number(Java实现-四种解法)
这是悦乐书的第199次更新,第208篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第64题(顺位题号是263).编写一个程序来检查给定的数字是否是一个丑陋的数字.丑陋的数 ...
- python 代码检测工具
对于我这种习惯了 Java 这种编译型语言,在使用 Python 这种动态语言的时候,发现错误经常只能在执行的时候发现,总感觉有点不放心. 而且有一些错误由于隐藏的比较深,只有特定逻辑才会触发,往往导 ...
- mysql 数据库基础命令
数据库命令: 进入 mysql 库; use mysql; 查看用户权限 select * from user where user='root' \G; 创建数据库 create database ...
- 2018年6月,最新php工程师面试总结
面试经常被问到的问题总结 1.字符串函数 2.数组函数 3.cookie和session的区别 4.状态码以及其功能
- Nginx+Keepalived双机热备
一.Keepalived Keepalived是保证集群高可用的服务软件.网络中优先级高的节点为master负责响应VIP的ARP包,将VIP和MAC地址映射关系告诉网络内其他主机,还会以多播的形式向 ...
- UVA1613-K-Graph Oddity(贪心)
Problem UVA1613-K-Graph Oddity Accept: 108 Submit: 884Time Limit: 3000 mSec Problem Description Inp ...
- 使用dd备份和恢复ASM中的数据文件头
这里用大家随处可见的(除了extent分布的x$kffxp需要百度和google外),其余都是文档中有详细记载的常用ASM视图来实现同样功能: 下面的用于从ASM中备份数据文件头: SQL> s ...
- Python requests上传文件demo
#!/usr/bin/env python # -*- coding: utf-8 -*- import requests headers = {'uuid': '5cb572b7-c0a7-4d90 ...