Educational Codeforces Round 61
时间:2019-08-21
本文章向大家介绍Educational Codeforces Round 61,主要包括Educational Codeforces Round 61使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Educational Codeforces Round 61
今早刚刚说我适合打pikmike出的EDU
然后我就挂了
A
不管
B
不管
C
这道题到快结束了才调出来
大概就是\(n^2\)枚举不选的区间
然后随便搞搞?
大体就是维护一下区间\(1\)的个数和\(2\)的个数
判断枚举的区间有没有交集
这个的答案就是并集1的个数和交集2的个数
用总的减去更新就好了
另外如果一个区间被另外一个区间完全包含
那么这个区间肯定是没用的
特判一下就好了
#include<cstdio>
#include<iostream>
#include<queue>
#include<algorithm>
#include<cstring>
#include<cctype>
#include<vector>
#include<ctime>
#include<cmath>
#define LL long long
#define pii pair<int,int>
#define mk make_pair
#define fi first
#define se second
using namespace std;
const int N = 5005;
struct node{
int xi;
int yi;
}a[N],b[N];
int n,q;
int sum[N];
int num2[N];
int num1[N];
bool book[N];
int tot;
int ans;
int cnt;
inline bool cmp(node x,node y){
if(x.xi != y.xi)
return x.xi < y.xi;
return x.yi < y.yi;
}
inline int read(){
int v = 0,c = 1;char ch = getchar();
while(!isdigit(ch)){
if(ch == '-') c = -1;
ch = getchar();
}
while(isdigit(ch)){
v = v * 10 + ch - 48;
ch = getchar();
}
return v * c;
}
inline bool jiao(int x,int y){
return a[x].yi >= a[y].xi;
}
int main(){
n = read(),q = read();
for(int i = 1;i <= q;++i){
a[i].xi = read();
a[i].yi = read();
}
sort(a + 1,a + q + 1,cmp);
for(int i = 1;i <= q;++i){
bool flag = 0;
for(int j = 1;j <= q;++j){
if(j == i || book[j]) continue;
if(a[j].xi <= a[i].xi && a[j].yi >= a[i].yi) flag = 1;
}
if(!flag) b[++cnt] = a[i];
else book[i] = 1;
}
sort(b + 1,b + cnt + 1,cmp);
for(int i = 1;i <= cnt;++i){
for(int j = b[i].xi;j <= b[i].yi;++j) sum[j]++;
}
for(int i = 1;i <= n;++i){
num1[i] = num1[i - 1] + (sum[i] == 1);
num2[i] = num2[i - 1] + (sum[i] == 2);
if(sum[i]) tot++;
}
if(cnt <= q - 2){printf("%d\n",tot);return 0;}
if(cnt == q - 1){
for(int i = 1;i <= cnt;++i){
ans = max(ans,tot - (num1[b[i].yi] - num1[b[i].xi - 1]));
}
cout << ans;
return 0;
}
for(int i = 1;i <= cnt;++i){
for(int j = i + 1;j <= cnt;++j){
int x = i,y = j;
if(jiao(x,y)){
ans = max(ans,tot - (num2[b[x].yi] - num2[b[y].xi - 1])
- (num1[b[y].yi] - num1[b[x].xi - 1]));
}
else{
ans = max(ans,tot - (num1[b[y].yi] - num1[b[y].xi - 1]) - (num1[b[x].yi] - num1[b[x].xi - 1]));
}
}
}
cout << ans;
return 0;
}
F
区间DP
我们设\(f_{l,r}\)表示吧\([l,r]\)这个区间全部删完的最小次数
对于\(s[l]\)我们考虑是把他和区间内的某个一起删还是单独删
\[
dp_{l , r} = \min(dp_{l + 1,r} + 1,\min_{l<i <= r,s[i] == s[l]}dp_{l,i - 1} + dp_{i,j})
\]
#include<cstdio>
#include<iostream>
#include<queue>
#include<algorithm>
#include<cstring>
#include<cctype>
#include<vector>
#include<ctime>
#include<cmath>
#define LL long long
#define pii pair<int,int>
#define mk make_pair
#define fi first
#define se second
using namespace std;
const int N = 505;
int f[N][N];
int n;
char s[N];
inline int read(){
int v = 0,c = 1;char ch = getchar();
while(!isdigit(ch)){
if(ch == '-') c = -1;
ch = getchar();
}
while(isdigit(ch)){
v = v * 10 + ch - 48;
ch = getchar();
}
return v * c;
}
int main(){
memset(f,0x3f,sizeof(f));
n = read();
scanf("%s",s + 1);
for(int i = 1;i <= n;++i){
f[i][i] = 1;
f[i][i - 1] = 0;
}
f[n + 1][n] = 0;
for(int len = 2;len <= n;++len){
for(int i = 1;i <= n;++i){
int j = i + len - 1;
if(j > n) continue;
f[i][j] = min(f[i][j],1 + f[i + 1][j]);
for(int h = i + 1;h <= j;++h)
if(s[i] == s[h]) f[i][j] = min(f[i][j],f[i + 1][h - 1] + f[h][j]);
}
}
cout << f[1][n];
return 0;
}
原文地址:https://www.cnblogs.com/wyxdrqc/p/11391357.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 微信开发系列之八 - 微信公众号的地图集成
- vivo 悟空活动中台 - 栅格布局方案
- 使用literal或者绑定变量执行SAP HANA SQL语句
- dotnet OpenXML 如何判断是形状还是文本
- dotnet 执行 docker 容器 error MSB4018 CreateAppHost 任务意外失败可能原因
- dotnet 定制 ILogger 实现
- dotnet 在 UOS 国产系统上安装 Mono 开发工具的方法
- dotnet 在 Linux 下的 GDI 库对 EMF 图片格式的支持
- 跟牛老师一起学WEBGIS——WEBGIS基础(WMS服务)
- 【STM32H7】第6章 RL-TCPnet V7.X底层驱动说明
- 【STM32F429】第6章 RL-TCPnet V7.X底层驱动说明
- 【STM32F407】第6章 RL-TCPnet V7.X底层驱动说明
- LINUX一些面试问题集合
- 【redis6.0.6】redis源码慢慢学,慢慢看 -- 第二天:空间配置(zmalloc)
- URI格式