Codeforces Round 918 (Div. 4) 解题报告 | 珂学家 | 偏序 + 扩展Dijkstra


前言

在这里插入图片描述


整体评价

属于VP,感觉还是能AK的,E是偏序题,F是改版的迪杰特斯拉。


A. Odd One Out

题型: 签到

t = int(input())
 
for i in range(t):
    a, b, c = list(map(int, input().split()))
    if a == b:
        print (c)
    elif a == c:
        print (b)
    else:
        print (a)

B. Not Quite Latin Square

题型: 签到

模拟一下就好

′ A B C ′ − ′ A x B ′ + ′ ? ′ 'ABC' - 'AxB' + '?' ABCAxB+?

如果有多个空的话,可能需要借助DFS搜索会比较好

其他思路:

  • 找到’?'所在的位子
  • 然后标记清除
t = int(input())

acc = sum([ord(c) for c in 'ABC'])
for _ in range(t):
    arr = [input() for _ in range(3)]
    for i in range(3):
        tmp = sum(ord(c) for c in arr[i])
        if acc != tmp:
            tc = chr(acc - tmp + ord('?'))
            print(tc)
            break

C. Can I Square?

思路: 模拟

即累加和为平方数

import math

t = int(input())
for _ in range(t):
    n = int(input())
    acc = sum(map(int, input().split()))
    r = int(math.sqrt(acc))
    if r * r == acc:
        print("YES")
    else:
        print("NO")

D. Unnatural Language Processing

思路: 划分型DP + 构造

t = int(input())

def isV(c) -> bool:
    if c == 'a' or c == 'e':
        return True
    return False

for _ in range(t):
    n = int(input())
    s = input()

    vis = [False] * (n + 1)
    source = [-1] * (n + 1)

    vis[0] = True
    for i in range(2, n + 1):
        if isV(s[i - 1]) and not isV(s[i - 2]) and vis[i - 2]:
            vis[i] = True
            source[i] = i - 2
        elif i >= 3 and not isV(s[i - 1]) and isV(s[i - 2]) and not isV(s[i - 3]) and vis[i - 3]:
            vis[i] = True
            source[i] = i - 3

    res = []
    x = n
    while source[x] != 0:
        res.extend(s[source[x]:x][::-1])
        res.append('.')
        x = source[x]
    res.extend(s[:x][::-1])

    print (''.join(res[::-1]))

E. Romantic Glasses

思路: map的应用

很有意思的一道题,感觉像map典题

引入奇数累加和,偶数累计加和,然后作差

如果map中存在,则必然存在一个区间,满足要求

在codeforce中,因为map要hack,所以要引入随机值进行异或

import random


t = int(input())
for _ in range(t):
    n = int(input())
    arr = list(map(int, input().split()))

    h = random.randint(1, 1 << 30)
    cnt = {h}
    s1, s2 = 0, 0
    ok = False
    for i in range(n):
        if i % 2 == 0:
            s2 += arr[i]
        else:
            s1 += arr[i]
        d = s1 - s2
        if (d ^ h) in cnt:
            ok = True
            break
        cnt.add(d ^ h)
    if ok:
        print ("YES")
    else:
        print ("NO")


F. Greetings

思路: 偏序类问题

t = int(input())

class Bit(object):

    def __init__(self, n):
        self.n = n
        self.arr = [0] * (n + 1)
    def query(self, p) -> int:
        r = 0
        while p > 0:
            r += self.arr[p]
            p -= p & -p
        return r
    def update(self, p, d) -> None:
        while p <= self.n:
            self.arr[p] += d
            p += p & -p

    def expr(self):
        print (self.arr)

for _ in range(t):
    n = int(input())
    ops = []

    ys = []
    for i in range(n):
        l, r = list(map(int, input().split()))
        ops.append((0, l, r))
        ops.append((1, r, 0))
        ys.append(l)
        ys.append(r)

    ops.sort(key=lambda x: (x[1], x[0]))
    ys.sort(key=lambda x: x)

    m = len(ys)
    hp = {}
    for (i, k) in enumerate(ys):
        hp[k] = i+1
    bit = Bit(m)

    res = 0
    for (c, d, er) in ops:
        if c == 0:
            res += bit.query(m) - bit.query(hp[er] - 1)
            bit.update(hp[er], 1)
        elif c == 1:
            bit.update(hp[d], -1)
    print (res)
        

F. Bicycles

思路: 改版dij

扩展节点,引入新节点(cityId, cycleId)

这样就能求解出最优的解来了

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {

    public static void main(String[] args) {
        AReader sc = new AReader();
        int t = sc.nextInt();
        while (t-- > 0) {
            int n = sc.nextInt(), m = sc.nextInt();
            List<int[]> []g = new List[n];
            Arrays.setAll(g, x->new ArrayList<>());
            for (int i = 0; i < m; i++) {
                int u = sc.nextInt() - 1, v = sc.nextInt() - 1;
                int w = sc.nextInt();
                g[u].add(new int[] {v, w});
                g[v].add(new int[] {u, w});
            }
            int[] vs = new int[n];
            for (int i = 0; i < n; i++) {
                vs[i] = sc.nextInt();
            }

            long inf = Long.MAX_VALUE / 10;
            long[][] path = new long[n][n];
            for (int i = 0; i < n ;i++) {
                Arrays.fill(path[i], inf);
            }

            PriorityQueue<long[]> pq = new PriorityQueue<>(Comparator.comparing(x -> x[1]));
            pq.offer(new long[] {0, 0, 0});
            path[0][0] = 0;

            while (!pq.isEmpty()) {
                long[] cur = pq.poll();
                int vid = (int)cur[0];
                int sid = (int)cur[2];

                if (path[vid][sid] < cur[1]) {
                    continue;
                }

                int ss = vs[vid] < vs[sid] ? vid : sid;

                for (int[] e: g[vid]) {
                    int v = e[0], w = e[1];
                    if (path[v][ss] > cur[1] + (long)vs[ss] * w) {
                        path[v][ss] = cur[1] + (long)vs[ss] * w;
                        pq.offer(new long [] {v, path[v][ss], ss});
                    }
                }
            }

            System.out.println(Arrays.stream(path[n - 1]).min().getAsLong());
        }
    }

    static
    class AReader {
        private BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        private StringTokenizer tokenizer = new StringTokenizer("");
        private String innerNextLine() {
            try {
                return reader.readLine();
            } catch (IOException ex) {
                return null;
            }
        }
        public boolean hasNext() {
            while (!tokenizer.hasMoreTokens()) {
                String nextLine = innerNextLine();
                if (nextLine == null) {
                    return false;
                }
                tokenizer = new StringTokenizer(nextLine);
            }
            return true;
        }
        public String nextLine() {
            tokenizer = new StringTokenizer("");
            return innerNextLine();
        }
        public String next() {
            hasNext();
            return tokenizer.nextToken();
        }
        public int nextInt() {
            return Integer.parseInt(next());
        }

        public long nextLong() {
            return Long.parseLong(next());
        }

//        public BigInteger nextBigInt() {
//            return new BigInteger(next());
//        }
        // 若需要nextDouble等方法,请自行调用Double.parseDouble包装
    }

}

写在最后

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/358937.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Python的全国主要城市天气数据可视化大屏系统

1 绪论 1.1 研究的目的与意义 近年来&#xff0c;气候变化引发全球范围内的关注。天气数据的采集和分析对于气候预测、生态环境保护等方面都起着至关重要的作用。同时&#xff0c;随着科技的不断发展&#xff0c;数据可视化已经成为了许多领域中不可或缺的一部分。基于此&…

防御保护 笔记整理

一、ASPF--- 针对应用层的包过滤 ASPF --- 针对应用层的包过滤 --- 用来抓取多通道协议中协商端口的关键数据包&#xff0c;之后&#xff0c;将端 口算出&#xff0c;将结果记录在sever-map表中&#xff0c;相当于开辟了一条隐形的通道。 FTP --- 文件传输协议 FTP协议是一个典…

指针进阶1

一&#xff0c;字符指针 顾名思义&#xff1a;字符指针指的是一种指针类型为字符指针 char*&#xff1b; char*可以是一个字符也可以是一个字符串&#xff0c;前者很好理解&#xff0c;让我们看看后者&#xff1b; eg&#xff1a;char*p"abcdef";//实际上是将首元…

【开源精选导航】GitHub-Chinese-Top-Charts:一榜在手,优质中文项目轻松找寻

各位热爱开源技术的朋友们&#xff0c;你们是否有过这样的困扰&#xff1a;面对浩瀚的GitHub海洋&#xff0c;想找寻那些具有高质量中文文档的优秀开源项目却无从下手&#xff1f;今天&#xff0c;我们就为大家揭晓一个宝藏般的开源项目——GitHub 中文项目集合&#xff08;访问…

如何在win系统部署Apache服务并实现无公网ip远程访问

文章目录 前言1.Apache服务安装配置1.1 进入官网下载安装包1.2 Apache服务配置 2.安装cpolar内网穿透2.1 注册cpolar账号2.2 下载cpolar客户端 3. 获取远程桌面公网地址3.1 登录cpolar web ui管理界面3.2 创建公网地址 4. 固定公网地址 前言 Apache作为全球使用较高的Web服务器…

idea项目如何上传gitee

1.先创建仓库 2.从gitee上面clone下来 3.配置一下git 4.在idea里面安装Gitee插件&#xff08;安装完插件重启一下&#xff09; 5.将项目提交到远程仓库 git->add->✔ 完后点击↗ 在码云如何获取token&#xff1f; 注&#xff1a;没有解决&#xff0c;有时间在继续研究

linux kernel 内存踩踏之KASAN(一)

一、背景 linux 内核出现内存类问题时&#xff0c;我们常用的调试工具就是kasan&#xff0c;kasan有三种模式&#xff1a; 1. Generic KASAN &#xff08;这个就是我们最常用的&#xff0c;1 debug byte indicate 8 bytes use state, 对标用户层 asan&#xff09; 2. Softwa…

滴滴举行网约车合作伙伴大会,与174家合作伙伴共商发展

近日&#xff0c;滴滴在昆明举行主题为“凝心聚力&#xff0c;共享发展”的第四届网约车合作伙伴大会&#xff0c;汽车租赁公司、司机服务公司、主机厂、金融机构等174家上下游生态链合作伙伴齐聚一堂。滴滴已连续四年举办网约车合作伙伴大会&#xff0c;邀请合作伙伴广泛参与、…

机器学习 | 掌握 K-近邻算法 的理论实现和调优技巧

目录 初识K-近邻算法 距离度量 K值选择 kd树 数据集划分 特征预处理 莺尾花种类预测(实操) 交叉验证与网格搜索 初识K-近邻算法 K-近邻算法&#xff08;K-Nearest Neighbor&#xff0c;KNN&#xff09;是一种基本的分类和回归算法。它的基本思想是通过找出与新对象最近…

万户 ezOFFICE DocumentEdit_unite.jsp SQL注入漏洞复现

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日…

一文速学-selenium高阶操作连接已存在浏览器

前言 不得不说selenium不仅在自动化测试作为不可或缺的工具&#xff0c;在数据获取方面也是十分好用&#xff0c;能够十分快速的见到效果&#xff0c;这都取决于selenium框架的足够的灵活性&#xff0c;甚至在一些基于web端的自动化办公都十分有效。 通过selenium连接已经存在…

[NCTF2019]Fake XML cookbook(特详解)

先试了一下弱口令&#xff0c;哈哈习惯了 查看页面源码发现xml function doLogin(){var username $("#username").val();var password $("#password").val();if(username "" || password ""){alert("Please enter the usern…

【三】【C++】类与对象(二)

类的六个默认成员函数 在C中&#xff0c;有六个默认成员函数&#xff0c;它们是编译器在需要的情况下自动生成的成员函数&#xff0c;如果你不显式地定义它们&#xff0c;编译器会自动提供默认实现。这些默认成员函数包括&#xff1a; 默认构造函数 (Default Constructor)&…

设计模式之框架源码剖析(实战+图解)

Java设计模式 1&#xff0c;概述 随着软件开发人员人数的增多&#xff0c;一些公司急需一些高端人才。作为一个高端人才&#xff0c;设计面向对象软件是必不可少的能力&#xff0c;而软件设计是需要很深的功力&#xff0c;设计模式就要求你必须掌握。 2&#xff0c;本章特色…

中国地区cetos7.9 install kubeadmin

第 1 步&#xff1a;禁用 SELinux&#xff08;可选但推荐&#xff09; 如何在 CentOS 7 上查找 SELinux 状态 sestatus另一种选择是运行以下 cat 命令&#xff1a; vi /etc/selinux/config SELINUXdisabled rebootcentos7 linux 安装k8s前下面操作的作用是&#xff1f; cat…

基于JAVA的河南软件客服系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统管理人员2.2 业务操作人员 三、系统展示四、核心代码4.1 查询客户4.2 新增客户跟进情况4.3 查询客户历史4.4 新增服务派单4.5 新增客户服务费 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的河…

day38_MySQL

今日内容 0 复习昨日 1 引言 2 数据库 3 数据库管理系统 4 MySQL 5 SQL语言 0 复习昨日 1 引言 1.1 现有的数据存储方式有哪些&#xff1f; Java程序存储数据&#xff08;变量、对象、数组、集合&#xff09;&#xff0c;数据保存在内存中&#xff0c;属于瞬时状态存储。文件&…

Google Chrome 常用的几个参数

1 右键--Google Chrome--属性--目标 参数作用--disable-infobars此计算机将不会再收到 Google Chrome 更新&#xff0c;因为 Windows XP 和 Windows Vista 不再受支持。适用于 xp、2003 的 49.x.x.x 版本。示例1--ingore-certificate-errors忽略证书错误--disable-background-…

开源知识库:让企业低成本实现知识管理

管理和利用企业内部知识已经成为提升效率和竞争力的重要手段。而对于大多数企业&#xff0c;尤其是中小企业而言&#xff0c;如何在有限的预算下&#xff0c;实现高效的知识管理&#xff0c;仍是一项挑战。面对这一问题&#xff0c;开源知识库应运而生。今天&#xff0c;我们将…

Linux - 数据流重定向、管道符、环境变量配置文件的加载

概述 想了解Linux编程&#xff0c;shell脚本是绕不开的关键知识点&#xff0c;原计划写一个整篇来分享shell的来龙去脉&#xff0c;但知识点过于繁杂&#xff0c;先分享一下学习shell的准备工作&#xff0c;数据流重定向、管道符、环境变量配置文件的加载&#xff0c;有助于知…