cf暑假训练 1700-1800 day1

news2024/12/28 11:31:54

cf暑假训练 1700-1800 day1

    • 1852B Imbalanced Arrays
    • 1850H. The Third Letter
    • 1833G Ksyusha and Chinchilla
    • 1833F Ira and Flamenco(补完线段树来看)
    • 1809D Binary String Sorting
    • 1780D Bit Guessing Game(这题真的好难,我只能说我看懂答案了,但是我真的推不出来)

1852B Imbalanced Arrays

  1. bi + bj肯定不能为0,比如bi的绝对值为n的话bi只能在n和-n这一对数字中间选择一个
  2. 双指针(这也是为什么升序排序的原因),类似要么在l的答案里面不带r,要么在r的答案里面带上l,但是两者不能同时满足,因为我刚开始打1800的题目我无法很清楚的表达我的意思,还请见谅

1850H. The Third Letter

思路: 就是搜索,但是用val[]验证结果是我没想到的
trick :

  • 学习vector<pair<int, int>>a、vector<pair<int, int>>a[3]、vector<vector<pair<int, int>>> a、vector<array<int, 3>>a这些容器的区别,具体一些api类似clear,emplace,push_back这种可以去查文档

不知道为什么一直wa,明明和题解写的差不多
在这里插入图片描述

#include <bits/stdc++.h>
#include <vector>
#include<iostream>
#include<unordered_map>
#include <queue>
#include <set>
using namespace std;
typedef pair<int, int> pii;
const int N = 2e5 + 5;
vector<pii> adj[N];
int vis[N], val[N];

void dfs(int u)
{
    vis[u] = 1;
    int sz = adj[u].size();
    for (auto x : adj[u])
    {
        int v = x.first, w = x.second;
        if (vis[v] == 0)
        {
            
            val[v]= w + val[u];

            dfs(v);
        }   
    }
}
void solve()
{  
    int n, m;
    cin >> n >> m; 

    for (int i = 1; i <= n; ++ i)
    {
        adj[i].clear();
        vis[i] = 0, val[i] = 0;   
    }

    vector<array<int, 3>> c;
    for (int i = 1; i <= m; ++ i)
    {
        int a, b, d;
        cin >> a >> b >> d;
        adj[a].push_back({b, d});
        adj[b].push_back({a, -d});
        c.push_back({a, b, d});
    }

    for (int i = 1; i <= n; ++ i)
    {
         if (vis[i] == 0) dfs(i);
    }

    for (int i =1; i <= m; ++ i)
    {
        int a = c[i - 1][0], b = c[i - 1][1], d = c[i - 1][2];
        if (val[a] + d != val[b] ) 
        {
            cout << "NO" << endl;
            return ;
        }
    }

    cout << "YES" << endl;
}
int32_t main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    int T;
    cin >> T;
    while (T --) solve();
    return 0;
}

1833G Ksyusha and Chinchilla

题意在这

trick:

  • 学会了在方法里面创建一个方法对象
  • 对dfs有了更深的理解,原来可以传入idx表示当前通过哪个边到达当前点的,正好可以在满足条件的时候直接收集结果;
  • 通过ok全局变量表示子树是否满足条件,siz[1]判断根节点是否满足条件,因为在dfs的时候 sz>3才会让ok = false,但是根节点的话sz != 0也是不满足题意的
  • 用联通块 == 3 将题意化简,降低思维的难度
#include <bits/stdc++.h>

using namespace std;
typedef pair<int, int> pii;



void solve()
{  
    int n;
    cin >> n;
    vector<vector<pii>> edges(n + 1);
    for (int i = 1; i < n; ++ i)
    {
        int u, v; cin >> u >> v;
        edges[u].push_back({v, i}), edges[v].push_back({u, i});
    }
    bool ok = true;
    vector<int> sz(n + 1);
    vector<int> ans;
    //idx指的是由哪条边找到当前点的
    function<void(int, int, int)> dfs = [&](int u, int fa, int idx) 
    {
        sz[u] = 1;
        for (auto [v, idx] : edges[u])
        {
            if (v == fa) continue;
            else
            {
                dfs(v, u, idx);
                sz[u] += sz[v];
            }
        }      
        if (sz[u] > 3)
        {
            ok = false;
            return ;
        }
        else if (sz[u] == 3)
        {
            sz[u] = 0;
            if (idx != 0) ans.push_back(idx);//u = 1的时候一条边都不需要剪
        }
    };

    dfs(1, 0, 0);

    ok &= !sz[1];//根节点所在的联通块为0才说明当前树全被剪完了
    if (ok)
    {
        cout << ans.size() << endl;
        for (auto idx : ans) cout << idx << " ";
        cout << endl;
    }
    else cout << -1 << endl;
}
int32_t main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    int T;
    cin >> T;
    while (T --) solve();
    return 0;
}

1833F Ira and Flamenco(补完线段树来看)

这题好像要用线段树,主席树啥的,题解在洛古有,很清楚。。我要去补提高课了。

1809D Binary String Sorting

题意:
两个操作把当前的字符串变成一个非递减的字符串

  1. 删除一个元素,代价是1e12 + 1
  2. 交换两个连续的元素,代价是1e12

其实就是一道贪心的题目
在这里插入图片描述

#include <bits/stdc++.h>

using namespace std;
typedef pair<int, int> pii;

const long long pw10 = 1e12;

void solve()
{  
    string s;
    cin >> s;
    long long ans = 1e18;
    int cnt0 = 0, cnt1 = count(s.begin(), s.end(), '1');
    //cnt0表示当前位置之前有多少0,cnt1表示当前位置之后有多少1
    int n = s.size();
    if (n == 1) ans = 0;
    for (int i = 0; i < n - 1; ++ i)
    {
        if (s[i] == '0') cnt0 ++;
        else cnt1 --;
        int k = cnt0 + cnt1 + (s[i] == '1') + (s[i + 1] == '0');
        long long cur = 0;
        cur = (n - k) * (pw10 + 1);
        if (s[i] > s[i + 1]) cur += pw10;
        ans = min(cur, ans);
    }
    cout << ans << endl;
}
int32_t main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    int T;
    cin >> T;
    while (T --) solve();
    return 0;
}

1780D Bit Guessing Game(这题真的好难,我只能说我看懂答案了,但是我真的推不出来)

trick:

  • 如何获得迭代过程中的n’的最后一个1的位置,仅仅靠题目给我n’的二进制表示中的1的个数
  • 如何让n的二进制最后一个1到最后一位0之间全部变成1,设二进制n的最后一位0的位置为i,n’ - 2i即可

我大概总结了一下:

在这里插入图片描述
在这里插入图片描述

#include <bits/stdc++.h>

using namespace std;
typedef pair<int, int> pii;


int ask(int x)
{
    cout << "- " << x << endl;
    cout.flush();
    int t_cnt; cin >> t_cnt;
    return t_cnt;
}
void solve()
{  
    int cnt; cin >> cnt;
    int last = 1;
    int ans = 0;
    while (cnt)
    {
        int t_cnt = ask(last);//减last的目的其实就是让n'最后一个1和第0位之间全部变成1,这样我们就知道最后1位1所在的位置了
        last = (1 << (t_cnt - cnt + 1));//t - cnt + 1获得当前n'的最后一个1和第0位的距离
        ans |= last;// |=就是+=  
        cnt -- ;
    }    

    cout << "! " << ans << endl;
}
int32_t main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    int T;
    cin >> T;
    while (T --) solve();
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

yolov5、YOLOv7、YOLOv8改进:注意力机制CA

论文题目&#xff1a;《Coordinate Attention for Efficient Mobile NetWork Design》论文地址&#xff1a; https://arxiv.org/pdf/2103.02907.pdf 本文中&#xff0c;作者通过将位置信息嵌入到通道注意力中提出了一种新颖的移动网络注意力机制&#xff0c;将其称为“Coordin…

msvcp120.dll丢失的解决方法?分享三种常见解决方法

msvcp120.dll是一个动态链接库文件&#xff0c;它是Microsoft Visual C Redistributable包中的一个组成部分。它是用于支持C编程语言的运行时库文件之一。它包含了许多标准库函数、容器类、算法和其他与C语言相关的功能。这些功能包括内存管理、字符串处理、数学计算、文件操作…

每日一题 206反转链表

题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&#xff1a; …

浅谈XML配置实现逻辑

XML简介 什么是XML&#xff1f; xml是可扩展的标记语言 XML的作用 主要作用&#xff1a; 1.用来保存数据&#xff0c;而且这些数据具有自我描述性 2.他可以作为项目或者模块的配置文件 3.还可以作为网络传输数据的格式&#xff08;现在JSON为主&#xff09; 第一个实例 命…

计算机组成原理-笔记-汇总

&#x1f4da; 前言 本人在备考408&#xff0c;王道讲得的确不错&#xff0c;本人之前也看过哈工大【刘宏伟老师】的课&#xff0c;两者对比下来。 王道——更加基础&#xff0c;对小白更加友好哈工大——偏实践偏硬件&#xff08;会将更多的代码硬件设计&#xff09; PS&#…

SpringBoot2-Tomcat部署

1.排除内置 Tomcat 在pom.xml文件中的下添加以下代码&#xff0c;用于排除SpringBoot内置Tomcat <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion&…

什么是CSS中的渐变(gradient)?如何使用CSS创建线性渐变和径向渐变?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 渐变&#xff08;Gradient&#xff09;在CSS中的应用⭐ 线性渐变&#xff08;Linear Gradient&#xff09;语法&#xff1a;示例&#xff1a; ⭐ 径向渐变&#xff08;Radial Gradient&#xff09;语法&#xff1a;示例&#xff1a; ⭐ 写…

Kotlin和Java互操作时的可空性

注&#xff1a;文中demo的kt版本是1.7.10 一、kotlin语言中的可空性设计 在Java语言中的NPE&#xff08;NullPointerException&#xff09;可以说非常常见&#xff0c;而且诟病已久。 kotlin做为后起之秀&#xff0c;在空指针的问题上进行了升级&#xff0c;即&#xff1…

day9 10-牛客67道剑指offer-JZ66、19、20、75、23、76、8、28、77、78

文章目录 1. JZ66 构建乘积数组暴力解法双向遍历 2. JZ19 正则表达式匹配3. JZ20 表示数值的字符串有限状态机遍历 4. JZ75 字符流中第一个不重复的字符5. JZ23 链表中环的入口结点快慢指针哈希表 6. JZ76 删除链表中重复的结点快慢指针三指针如果只保留一个重复结点 7. JZ8 二…

HttpRunner自动化工具之设置代理和请求证书验证

httprunner设置代理&#xff1a; httprunner 库本身没有提供设置代理的接口&#xff0c;但是底层使用了urllib.requests 等库&#xff0c;可以设置HTTP_PROXY 和HTTPS_PROXY 环境变量&#xff0c;常用的网络库会自动识别这些环境变量。 日常调试使用代理&#xff08;如charles…

SQL-每日一题【】

题目 Employees 表&#xff1a; EmployeeUNI 表&#xff1a; 展示每位用户的 唯一标识码&#xff08;unique ID &#xff09;&#xff1b;如果某位员工没有唯一标识码&#xff0c;使用 null 填充即可。 你可以以 任意 顺序返回结果表。 返回结果的格式如下例所示。 示例 1&a…

使用ip2region获取客户端地区

目录 从gitee拉取ip2region.xdb资源文件 写测试类 注意要写对资源路径 本地测试结果 ​编辑 远端测试结果 从gitee拉取ip2region.xdb资源文件 git clone https://gitee.com/lionsoul/ip2region.git 将xdb放入resources资源文件夹 写测试类 private Searcher searcher;GetMap…

funbox3靶场渗透笔记

funbox3靶场渗透笔记 靶机地址 https://download.vulnhub.com/funbox/Funbox3.ova 信息收集 fscan找主机ip192.168.177.199 .\fscan64.exe -h 192.168.177.0/24___ _/ _ \ ___ ___ _ __ __ _ ___| | __/ /_\/____/ __|/ __| __/ _ |/ …

数据结构-栈的实现(C语言版)

前言 栈是一种特殊的线性表&#xff0c;只允许在固定的一端进行插入和删除的操作&#xff0c;进行数据插入和删除的一端叫做栈顶&#xff0c;另一端叫做栈底。 栈中的数据元素遵循后进先出的的原则。 目录 1.压栈和出栈 2. 栈的实现 3.测试代码 1.压栈和出栈 压栈&#xff…

最小生成树 — Prim算法

同Kruskal算法一样&#xff0c;Prim算法也是最小生成树的算法&#xff0c;但与Kruskal算法有较大的差别。 Prim算法整体是通过“解锁” “选中”的方式&#xff0c;点 -> 边 -> 点 -> 边。 因为是最小生成树&#xff0c;所以针对的也是无向图&#xff0c;所以可以随意…

带你了解SpringBoot支持的复杂参数--自定义对象参数-自动封装

&#x1f600;前言 本篇博文是关于SpringBoot 在响应客户端请求时支持的复杂参数和自定义对象参数&#xff0c;希望您能够喜欢&#x1f60a; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章…

Docker知识(详细笔记)

概览图 文章目录 概览图docker 知识速查1. 初识 Docker1.1 概念1.2 特点1.3 架构1.4 应用场景1.5 安装 Docker1.6 配置 Docker 镜像 2. Docker 命令2.1 Docker 进程相关命令2.2 Docker 镜像相关命令2.3 Docker 容器相关命令 3. Docker 容器的数据卷3.1 数据卷概念及作用3.1.1 概…

小米平板6Max14即将发布:自研G1 电池管理芯片,支持33W反向快充

明天晚上7点&#xff08;8 月 14 日&#xff09;&#xff0c;雷军将进行年度演讲&#xff0c;重点探讨“成长”主题。与此同时&#xff0c;小米将推出一系列全新产品&#xff0c;其中包括备受瞩目的小米MIX Fold 3折叠屏手机和小米平板6 Max 14。近期&#xff0c;小米官方一直在…

java 9新特效解读(4)

目录 InputStream 加强 增强的 Stream API takeWhile()的使用 dropWhile()的使用 ofNullable()的使用 iterate()重载的使用 Optional获取Stream的方法 Optional类中stream()的使用 javascript引擎升级&#xff1a;Nashorn InputStream 加强 InputStream 终于有了…

supervisor因为依赖安装失败的解决方法

安装FEATA时报错情况 下列软件包有未满足的依赖关系&#xff1a;supervisor : 依赖: python-pkg-resources 但是它将不会被安装依赖: python-meld3 但是它将不会被安装依赖: python:any (< 2.8)依赖: python:any (> 2.7.5-5~) E: 无法修正错误&#xff0c;因为您要求某些…