补了一场Edu round。

A : Marketing Scheme

水题

#include <cstdio>
#include <algorithm>
typedef long long ll;
int T,l,r; template <typename T>
inline void read(T &x){
x = 0; char ch = getchar(); int f = 1;
for(;ch < '0' || ch > '9'; ch = getchar()) if(ch == '-') f = -1;
for(;ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
x *= f;
}
int main(){
read(T);
while(T--){
read(l); read(r);
if(l * 2 > r) printf("YES\n");
else printf("NO\n");
}
return 0;
}

B :Reverse Binary Strings

水构造

#include <cstdio>
#include <algorithm>
typedef long long ll;
const int M = 200010;
int T,n,cnt1,cnt2;
int a[M]; template <typename T>
inline void read(T &x){
x = 0; char ch = getchar(); int f = 1;
for(;ch < '0' || ch > '9'; ch = getchar()) if(ch == '-') f = -1;
for(;ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
x *= f;
}
int main(){
read(T);
while(T--){
read(n); cnt1 = cnt2 = 0;
for(int i = 1;i <= n; i++){
char ch = getchar();
for(;ch != '0' && ch != '1'; ch = getchar()) ;
a[i] = ch - '0';
if(i != 1){
if(a[i] == a[i - 1] && a[i] == 1) cnt1++;
else if(a[i] == a[i - 1] && a[i] == 0) cnt2++;
}
}
printf("%d\n",std::max(cnt1,cnt2));
}
return 0;
}

C : Chef Monocarp

比较奇怪的背包,照理压成一维。

#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
typedef long long ll;
const int M = 210;
int T,n;
int t[M], dp[M]; template <typename T>
inline void read(T &x){
x = 0; char ch = getchar(); int f = 1;
for(;ch < '0' || ch > '9'; ch = getchar()) if(ch == '-') f = -1;
for(;ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
x *= f;
}
int main(){
read(T);
while(T--){
read(n);
for(int i = 1;i <= n; i++) read(t[i]);
std::sort(t + 1,t + n + 1);
memset(dp,0x3f,sizeof(dp));
dp[0] = 0;
for(int i = 1;i <= n << 1; i++)
for(int j = n;j >= 1; j--)
dp[j] = std::min(dp[j],dp[j - 1] + abs(i - t[j]));
printf("%d\n",dp[n]);
}
return 0;
}

D :Minimal Height Tree

因为是bfs,所以直接按照性质模拟即可。

#include <cstdio>
#include <algorithm>
typedef long long ll;
const int M = 200010;
int T,n;
int a[M]; template <typename T>
inline void read(T &x){
x = 0; char ch = getchar(); int f = 1;
for(;ch < '0' || ch > '9'; ch = getchar()) if(ch == '-') f = -1;
for(;ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
x *= f;
}
int main(){
read(T);
while(T--){
read(n);
for(int i = 1;i <= n; i++) read(a[i]);
int dep = 0, cur = 0, sum = 1;
for(int i = 2,j;i <= n; i++){
if(!cur){
cur = sum; dep++;
}
cur--; j = i;
while(j <= n){
if(a[j] < a[j + 1]){
j++; sum++;
}
else break;
}
i = j;
}
printf("%d\n",dep);
}
return 0;
}

E :Make It Increasing

贪心。直接在每个被b圈定的区间内贪心,记录不需要更改的点个数。

还有一个明显的转化,具体见代码。

#include <cstdio>
#include <algorithm>
typedef long long ll;
const int M = 500010;
int n,k,ans;
int a[M], b[M]; template <typename T>
inline void read(T &x){
x = 0; char ch = getchar(); int f = 1;
for(;ch < '0' || ch > '9'; ch = getchar()) if(ch == '-') f = -1;
for(;ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
x *= f;
}
int sta[M], top = 0;
int main(){
read(n); read(k);
for(int i = 1;i <= n; i++)
read(a[i]), a[i] -= i;
for(int i = 1;i <= k; i++) read(b[i]);
a[n + 1] = 1e9; a[0] = -1e9;
b[k + 1] = n + 1;
for(int i = 0,l,r;i <= k; i++){
l = b[i]; r = b[i + 1];
if(a[l] > a[r]){
printf("-1\n"); return 0;
}
top = 0;
for(int j = l + 1;j < r; j++)
if(a[l] <= a[j] && a[j] <= a[r]){
int it = std::upper_bound(sta + 1,sta + top + 1,a[j]) - sta;
if(it == top + 1) sta[++top] = a[j];
else sta[it] = a[j];
}
ans += r - l - 1 - top;
}
printf("%d\n",ans);
return 0;
}

F :Emotional Fishermen

既然是记录方案数,那应该是dp了。具体见代码,注意特判。

#include <cstdio>
#include <algorithm>
typedef long long ll;
const int M = 5010, mod = 998244353;
int n;
int a[M], pre[M];//表示最大的j使得a[j] * 2 <= a[i]
int dp[M];//表示以i点为最大值的方案数 template <typename T>
inline void read(T &x){
x = 0; char ch = getchar(); int f = 1;
for(;ch < '0' || ch > '9'; ch = getchar()) if(ch == '-') f = -1;
for(;ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
x *= f;
}
inline ll q_pow(ll x,ll num){
ll ret = 1;
for(;num; num >>= 1){
if(num & 1) ret = (1ll * ret * x) % mod;
x = (1ll * x * x) % mod;
}
return ret;
}
int fac[M], ifac[M];
inline void pre_work(){
fac[0] = fac[1] = ifac[0] = 1;
for(int i = 2;i <= n; i++) fac[i] = (1ll * fac[i - 1] * i) % mod;
ifac[n] = q_pow(fac[n],mod - 2);
for(int i = n - 1;i >= 1; i--) ifac[i] = (1ll * ifac[i + 1] * (i + 1)) % mod;
}
inline int A(int i,int j){
if(i > j || i < 0 || j < 0) return 0;
return (1ll * fac[j] * ifac[j - i]) % mod;
}
int main(){
read(n);
for(int i = 1;i <= n; i++) read(a[i]);
std::sort(a + 1,a + n + 1);
int l = 0;
for(int i = 1;i <= n; i++){
while(a[l + 1] << 1 <= a[i]) l++;
pre[i] = l;
}
if(pre[n] != n - 1){
printf("0\n"); return 0;
}
dp[0] = 1; pre[0] = -1;
pre_work();
for(int i = 1;i <= n; i++)
for(int j = 0;j <= pre[i]; j++)
dp[i] = (1ll * dp[i] + 1ll * dp[j] * A(pre[i] - pre[j] - 1,n - pre[j] - 2) % mod) % mod;
printf("%d\n",dp[n]);
return 0;
}

G :Death DBMS

后缀自动机,不会。

Educational Codeforces Round 97 (Rated for Div. 2)的更多相关文章

  1. Educational Codeforces Round 97 (Rated for Div. 2) E. Make It Increasing(最长非下降子序列)

    题目链接:https://codeforces.com/contest/1437/problem/E 题意 给出一个大小为 \(n\) 的数组 \(a\) 和一个下标数组 \(b\),每次操作可以选择 ...

  2. Educational Codeforces Round 97 (Rated for Div. 2)【ABCD】

    比赛链接:https://codeforces.com/contest/1437 A. Marketing Scheme 题解 令 \(l = \frac{a}{2}\),那么如果 \(r < ...

  3. Educational Codeforces Round 97 (Rated for Div. 2) D. Minimal Height Tree (贪心)

    题意:有一个从根节点\(BFS\)得来的序列(每次\(bfs\)子节点的时候保证是升序放入队列的),现在让你还原树(没必要和之前相同),问能构造出的最小的树的深度. 题解:不看根节点,我们从第二个位置 ...

  4. Educational Codeforces Round 97 (Rated for Div. 2) C. Chef Monocarp (DP)

    题意:有\(n\)个菜在烤箱中,每个时刻只能将一个菜从烤箱中拿出来,第\(i\)个时刻拿出来的贡献是\(|i-a[i]|\),你可以在任意时刻把菜拿出来,问将所有菜拿出的最小贡献是多少? 题解: 先对 ...

  5. Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...

  6. Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)

    Problem   Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...

  7. Educational Codeforces Round 43 (Rated for Div. 2)

    Educational Codeforces Round 43 (Rated for Div. 2) https://codeforces.com/contest/976 A #include< ...

  8. Educational Codeforces Round 35 (Rated for Div. 2)

    Educational Codeforces Round 35 (Rated for Div. 2) https://codeforces.com/contest/911 A 模拟 #include& ...

  9. Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings

    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings 题目连接: http://cod ...

随机推荐

  1. 你想要的Java资料这里都有!!!

    你想要的Java资料这里都有!!!  [复制链接]       1.资源标题:程序员的SQL金典(完整) 资源地址:http://down.51cto.com/data/2207566 2.资源标题: ...

  2. 解决npm被墙的问题

    npm存储包文件的服务器在国外,有时候会被墙,速度很慢,所以我们需要解决这个问题. http://npm.taobao.org/  淘宝的开发团队把npm在国内做了一个备份. 安装淘宝的cnpm np ...

  3. Go 安装介绍

    Go介绍 Go语言被誉为21世纪的C语言,由Google公司开发,天生对高并发有着优秀的支持.并且语法极度简洁,关键字仅有25个. 所以使用Go语言时你不用担心自己写的和大神写的有着天差地别,Go语言 ...

  4. Feedforward neural networks前馈神经网络

    Feedforward neural networks or deep feedforward networks or multilayer perceptrons Pass input throug ...

  5. IdentityServer4系列 | 初识基础知识点

    前言 我们现在日常生活中,会使用各式各样的应用程序,层出不穷,其中有基于网页浏览方式的应用,有基于手机端的App,甚至有基于流行的公众号和小程序等等,这些应用,我们不仅要实现各个应用的功能之外,还要考 ...

  6. Linux系统编程 —共享内存之mmap

    共享内存概念 共享内存是通信效率最高的IPC方式,因为进程可以直接读写内存,而无需进行数据的拷备.但是它没有自带同步机制,需要配合信号量等方式来进行同步. 共享内存被创建以后,同一块物理内存被映射到了 ...

  7. unity官方案例精讲(第三章)--星际航行游戏Space Shooter

    案例中实现的功能包括: (1)键盘控制飞船的移动: (2)发射子弹射击目标 (3)随机生成大量障碍物 (4)计分 (5)实现游戏对象的生命周期管理 导入的工程包中,包含着一个完整的 _scene--- ...

  8. JVM 第二篇:垃圾收集器以及算法

    本文内容过于硬核,建议有 Java 相关经验人士阅读. 0. 引言 一说到 JVM ,大多数人第一个想到的可能就是 GC ,今天我们就来聊一聊和 GC 关系最大的垃圾收集器以及垃圾收集算法,希望能通过 ...

  9. 硬盘安装Linux

    准备材料:U盘.Linux镜像.UltraISO 1.下载安装UltraISO, 2.打开系统镜像 打开后我们就可以在左边侧栏看到镜像的内容 3.插入U盘,点击:启动->写入光盘映像->选 ...

  10. 第五周:面向对象部分内容总结(5)---java设计规则

    面向对象设计原则 1.开闭原则 开闭原则理解: 简单说就是一个软件实体支持扩展,不支持修改.就是在不改变源码的基础上,扩展其它的功能. 其实笔者认为,开闭原则无非就是想表达这样一层意思:用抽象构建框架 ...