CF Educational Round 78 (Div2)题解报告A~E

A:Two Rival Students​

  • 依题意模拟即可

  • #include<bits/stdc++.h>
    using namespace std;
    int T;
    int n, x, a, b;
    int main()
    {
    cin >> T;
    while(T--)
    {
    cin >> n >> x >> a >> b;
    if(a > b) swap(a, b);
    while(x != 0)
    {
    if(a > 1) x--, a--;
    else if(a == 1) break;
    }
    while(x != 0)
    {
    if(b < n) x--, b++;
    else if(b == n) break;
    }
    cout << b - a << endl;
    }
    return 0;
    }

B: Magic Stick ​

  • 1,2,3会跑成循环,其他的只要不断扩大后减小就行,特判。

  • #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
    int T;
    cin >> T;
    while(T--)
    {
    int x, y; cin >>x >> y;
    if(x >= y) {
    puts("YES"); continue;
    }
    else
    {
    if(x == 2 && y != 3) {
    puts("NO");
    continue;
    }
    if(x == 3 && y != 3)
    {
    puts("NO");
    continue;
    }
    if(x == 1 && y != 1)
    {
    puts("NO");
    continue;
    }
    }
    puts("YES");
    }
    return 0;
    }

C: Dominated Subarray

  • 线性扫一遍就好了,其实是查询相同的两个元素的距离最小是多少

  • #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 2e5 + 10;
    int a[maxn], T, n, vis[maxn]; int main()
    {
    scanf("%d", &T);
    while(T--)
    {
    scanf("%d", &n);
    int ans = 0x3f3f3f3f;
    for(int i = 1; i <= n; i++)
    {
    scanf("%d", &a[i]);
    vis[i] = 0;
    } for(int i = 1; i <= n; i++)
    {
    int x = a[i];
    if(vis[x]) ans = min(i-vis[x], ans);
    vis[x] = i;
    } if(ans == 0x3f3f3f3f) puts("-1");
    else cout << ans + 1<< endl;
    }
    return 0;
    }

D: Yet Another Monster Killing Problem

  • 二分+贪心

  • 首先特判英雄最高的攻击力和怪兽最大的生命值,不够就肯定打不完。

  • 对于英雄而言,如果两个英雄\((i,j)\)攻击力相同,但是\(i.s>j.s\),那么我们肯定不选择\(j\)而选择\(i\)。

  • 所以我们按照\(p\)进行排序,之后进行后缀操作\(b(i).s\)表示\(i\)~\(n\)最大耐力值。

  • 对于某个怪物而言,我们可以找到一个英雄他的攻击力恰好大于这个怪物,因为\(b\)已经针对\(p\)排好序了,所以我们可以二分找这个英雄。

  • 我们从第一天开始,枚举每个怪物,如果当前能杀死最多怪物的英雄,对于某个怪物而言,如果英雄的耐力不足以支持当前的操作,则开启新的一天,循环杀死所有怪物。

  • #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 2e5 + 10;
    int T, n, m;
    int a[maxn]; struct Node{
    int p, s;
    }b[maxn]; bool cmp(Node a, Node b) {return a.p < b.p;}
    bool cmpp(Node x, int y) {return x.p < y;} int main()
    {
    cin >> T;
    while(T--)
    {
    int mx = 0;
    scanf("%d", &n);
    for(int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    mx = max(mx, a[i]);
    }
    scanf("%d", &m);
    for(int i = 1, x, y; i <= m; i++)
    {
    scanf("%d%d", &x, &y);
    b[i] = {x, y};
    }
    sort(b+1, b+1+m, cmp);
    if(b[m].p < mx)
    {
    puts("-1");
    continue;
    } for(int i = m - 1; i >= 1; i--)
    b[i].s = max(b[i].s, b[i+1].s);
    int days = 1;
    int las = 0; //上一个怪物
    int cnt = 0x3f3f3f3f; //从上一个怪物杀到现在的英雄的最小耐力 for(int i = 1; i <= n; i++)
    {
    int t = lower_bound(b+1, b+m+1, a[i], cmpp) - b;
    cnt = min(b[t].s, cnt);
    if(cnt + las < i) //当前这只怪物杀不掉了
    {
    cnt = b[t].s;
    days += 1;
    las = i - 1;
    }
    }
    cout << days << endl;
    }
    return 0;
    }

E:The Contest

  • \(dp\)
  • \(f(i,1/2/3)\)表示第\(i\)个数放在第\(1,2,3\)个同学手上的最小操作数。
  • 对于初始状态\(x\)在第\(i\)个同学手上,有\(a(x)=i\)。
  • 有状态转移方程\(f(i,k) = min(f(i,k), f(i,j)+(k!=a(i+1)))\),其中\((1\leq j \leq3,j\leq k \leq 3)\)
    • 解释:因为\(1,2,3\)同学手上的序列数要单调,所以\(j\leq k\)。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
int a[maxn], n;
int f[maxn][5]; int main()
{
int n1, n2, n3;
cin >> n1 >> n2 >> n3; n = n1 + n2 + n3;
for(int i = 1, x; i <= n1; i++)
scanf("%d", &x), a[x] = 1;
for(int i = 1, x; i <= n2; i++)
scanf("%d", &x), a[x] = 2;
for(int i = 1, x; i <= n3; i++)
scanf("%d", &x), a[x] = 3; memset(f, 0x3f, sizeof(f));
f[0][1] = f[0][2] = f[0][3] = 0; for(int i = 0; i <= n - 1; i++)
for(int j = 1; j <= 3; j++)
for(int k = j; k <= 3; k++)
f[i+1][k] = min(f[i+1][k], f[i][j] + (k != a[i+1])); cout << min(min(f[n][1], f[n][2]), f[n][3]) << endl; return 0;
}

F: Make Them Similar 待补。

CF Educational Round 78 (Div2)题解报告A~E的更多相关文章

  1. CF Round #580(div2)题解报告

    CF Round #580(div2)题解报告 T1 T2 水题,不管 T3 构造题,证明大约感性理解一下 我们想既然存在解 \(|a[n + i] - a[i]| = 1\) 这是必须要满足的 既然 ...

  2. Codeforces Educational Round 92 赛后解题报告(A-G)

    Codeforces Educational Round 92 赛后解题报告 惨 huayucaiji 惨 A. LCM Problem 赛前:A题嘛,总归简单的咯 赛后:A题这种**题居然想了20m ...

  3. CF1169(div2)题解报告

    CF1169(div2)题解报告 A 不管 B 首先可以证明,如果存在解 其中必定有一个数的出现次数大于等于\(\frac{m}{2}\) 暴力枚举所有出现次数大于等于$\frac{m}{2} $的数 ...

  4. Codeforces Round#320 Div2 解题报告

    Codeforces Round#320 Div2 先做个标题党,骗骗访问量,结束后再来写咯. codeforces 579A Raising Bacteria codeforces 579B Fin ...

  5. Codeforces Round#704 Div2 题解(A,B,C,D,E)

    FST ROUND !!1 A Three swimmers: 直接整除一下向上取整就好了: #include <bits/stdc++.h> using namespace std; t ...

  6. [CF]codeforces round 369(div2)

    *明早起来再贴代码 A [题意] 给定n*5的方格 将横向的相邻两个变成+输出 [题解] ... B [题意] 一个n*n的正整数矩阵,有且仅有一个数为0 ,在这个位置填上一个数,使得每一列的和 每一 ...

  7. [CF]codeforces round#366(div2)滚粗记

    开场心理活动:啊打完这场大概有1700了吧 中途心理活动:啊这个ABC看起来都随便做啊 死亡原因:欸怎么没网了 -75 .. A [题意]Hulk说完一句I hate会说that I love 然后是 ...

  8. CodeForces round 967 div2 题解(A~E)

    本来准备比完赛就写题解的, 但是一拖拖了一星期, 唉 最后一题没搞懂怎么做,恳请大神指教 欢迎大家在评论区提问. A Mind the Gap 稳定版题面 https://cn.vjudge.net/ ...

  9. Codeforces Round #407 div2 题解【ABCDE】

    Anastasia and pebbles 题意:你有两种框,每个框可以最多装k重量的物品,但是你每个框不能装不一样的物品.现在地面上有n个物品,问你最少多少次,可以把这n个物品全部装回去. 题解:其 ...

随机推荐

  1. linux安装go环境并编写第一个go程序

    1.从官网下载go源码包 wget https://dl.google.com/go/go1.12.5.linux-amd64.tar.gz 2.在/usr/local下解压源码包 sudo tar ...

  2. ElasticSearch6.3.2源码分析之节点连接实现

    ElasticSearch6.3.2源码分析之节点连接实现 这篇文章主要分析ES节点之间如何维持连接的.在开始之前,先扯一下ES源码阅读的一些心得:在使用ES过程中碰到某个问题,想要深入了解一下,可源 ...

  3. 黑科技!仅需 3 行代码,就能将 Gitter 集成到个人网站中,实现一个 IM 即时通讯聊天室功能?

    欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 高级架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...

  4. Prometheus监控学习笔记之Prometheus 2.x版本的常用变化

    最近用了prometheus 2.0 版本,感觉改变还是有点大,现将改变相关记录如下: 1.prometheus.yml文件配置修改后,要想重新加载,必须在启动的时候添加参数: --web.enabl ...

  5. 安全漏洞系列(一)---XSS漏洞解决方案(C# MVC)

    参考地址:https://www.cnblogs.com/sagecheng/p/9462239.html 测试项目:MVCDemo 一.XSS漏洞定义 XSS攻击全称跨站脚本攻击,它允许恶意web用 ...

  6. 实现个虚拟机只要几百行的 toy 版就够了

    关键是 指令 的 eval 并把 高层代码进行翻译. 典型的项目: 1.  java-compiler (C++) 2. 手把手教你构建 C 语言编译器(0)- 前言 | 三点水  (C)

  7. 开发技术--Numpy模块

    开发|Numpy模块 Numpy模块是数据分析基础包,所以还是很重要的,耐心去体会Numpy这个工具可以做什么,我将从源码与 地产呢个实现方式说起,祝大家阅读愉快! Numpy模块提供了两个重要对象: ...

  8. vue+element 表格按需合并

    这个功能难度感觉一般般吧,记录一下,以后碰到了直接来复制,懒得再写了 效果如下: 前6列是合并,后面的有几行,动态显示几行 重点是在数据处理上面做文章,合并列大家都会,数据处理呢?这样来处理, 我们拿 ...

  9. APS助众生药业突破运营管理瓶颈

    众生药业一直致力于为了世界提供世界级的产品及服务,成立以来公司先后实施了ERP系统,CRM系统,WMS系统,OA系统,精益生产,朝着行业信息化水平领先的目标迈进. 但近年随着业务量的不断扩大,仅仅拥有 ...

  10. MYSQL的修改表结构SQL语句

    更多java学习资料>>> 1.背景 使用sql语句对表结构进行修改 2.案例演示 案例:表结构 CREATE TABLE `login_user` ( `id` ) NOT NUL ...