2024.7.12 暑期训练记录(4)

news2024/11/14 8:23:40
  • 之后的训练方式是上午板刷2000的题,下午学新算法or vp,如果近期没有新算法要学也不vp就换成继续板刷,晚上补题,没有题要补就继续板刷
  • 在尝试新的做题方式,看完题先把主要信息写在纸上,如果有思路就顺着思路走,没有思路就玩玩样例,想到什么都写下来,可以增加自己做出题的概率

CF

1354C2 - Not So Simple Polygon Embedding(几何 *2000)

  • 一道简单版几何题,参考Codeforces 1354C2 - Not So Simple Polygon Embedding (几何)
  • 在这里插入图片描述
  • 这是最终矩形的四分之一,观察这一部分:
    • 首先一共有 2 n 2n 2n 条边,所以每条边所对应的角 e a c h = 36 0 ∘ 2 n each=\frac{360^{\circ}}{2n} each=2n360,这样的角一共有 2 n 2n 2n 个,所以四分之一个矩形所对的角有 c n t = 2 n 4 cnt=\frac{2n}{4} cnt=42n 个,凸多边形与正方形的交点是最接近中间位置的点,所以图中 θ = c n t 2 × e a c h \theta=\frac{cnt}{2}\times each θ=2cnt×each
    • 之后可以利用 θ \theta θ 计算出多边形每个小三角形的腰 x = 1.0 2 sin ⁡ θ 2 x=\frac{\frac{1.0}{2}}{\sin{\frac{\theta}{2}}} x=sin2θ21.0
    • 图中的 a n s 1 ans1 ans1 a n s 2 ans2 ans2 均可通过正弦定理求出
#include <bits/stdc++.h>

using namespace std;

#define int long long
using i64 = long long;

typedef pair<int, int> PII;
typedef pair<int, char> PIC;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;
typedef pair<int, pair<int, bool>> PIIB;

const int N = 1e6 + 10;
const int maxn = 1e6 + 10;
const int mod = 998244353;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;
const double PI = acos(-1.0);
const double epsilon = PI / 180.0;

void solve()
{
	int n;
	cin >> n;
	double each = 180.0 / n;
	double ang = round(n / 4.0) * each;
	double x = 1.0 / (2.0 * sin(each / 2.0 * epsilon));
	double x1 = x / sin(45 * epsilon) * sin(ang * epsilon);
	double x2 = x / sin(45 * epsilon) * sin((90 - ang) * epsilon);
	printf("%.10lf\n", x1 + x2);
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);

	int t = 1;
	cin >> t;
	while (t--)
	{
		solve();
	}
}

1344B - Monopole Magnets(思维,bfs *2000)

  • 首先看样例,可以发现一种不合法的情况,就是同一行同一列中不能出现两个不相邻的黑格子,原因略
  • 另外对于每行每列至少有一个 s s s 磁铁这一条,我们可以判断是否有至少一列全是白格子和至少一行全是白格子,要不就都没有,要不然就都有
  • 如果上述都满足,直接bfs,黑色连通块数量就是答案
#include <bits/stdc++.h>

using namespace std;

#define int long long
using i64 = long long;

typedef pair<int, int> PII;
typedef pair<int, char> PIC;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;
typedef pair<int, pair<int, bool>> PIIB;

const int N = 1e6 + 10;
const int maxn = 1e6 + 10;
const int mod = 998244353;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;

int dx[] = {0, 0, 1, -1}, dy[] = {1, -1, 0, 0};

void solve()
{
    int n, m;
    cin >> n >> m;
    vector<string> g(n + 1);
    for (int i = 1; i <= n; i ++ )
    {
        cin >> g[i];
        g[i] = " " + g[i];
    }
	vector<vector<bool>> st(n + 1, vector<bool>(m + 1));
    int cnt = 0;
    auto bfs = [&](int x, int y)
    {
        queue<PII> q;
        q.push({x, y});
        st[x][y] = true;
        while (q.size())
        {
            auto t = q.front();
            q.pop();
            for (int i = 0; i < 4; i ++ )
            {
                int nx = t.first + dx[i], ny = t.second + dy[i];
                if (nx <= 0 || nx > n || ny <= 0 || ny > m) continue;
                if (st[nx][ny] || g[nx][ny] == '.') continue;
                st[nx][ny] = true;
                q.push({nx, ny});
            }
        }
    };
    for (int i = 1; i <= n; i ++ )
    {
        for (int j = 1; j <= m; j ++ )
        {
            if (g[i][j] == '.') continue;
            if (st[i][j]) continue;
            bfs(i, j);
            cnt ++ ;
        }
    }
    int idx = 0;
    // 每一行是否符合要求
    for (int i = 1; i <= n; i ++ )
    {
        int flag = 0;
        for (int j = 1; j <= m; j ++ )
        {
            if (g[i][j] == '#' && g[i][j - 1] != '#') flag ++ ;
        }
        if (flag > 1)
        {
            cout << "-1\n";
            return;
        }
        else if (!flag)
        {
            idx = 1;
        }
    }
    // 每一列
    int tmp = 0;
    for (int j = 1; j <= m; j ++ )
    {
        int flag = 0;
        for (int i = 1; i <= n; i ++ )
        {
            if (g[i][j] == '#' && g[i - 1][j] != '#') flag ++ ;
        }
        if (flag > 1)
        {
            cout << -1 << '\n';
            return;
        }
        else if (!flag)
        {
            tmp = 1;
        }
    }
    idx += tmp;
    if (idx == 0 || idx == 2) cout << cnt << '\n';
    else cout << -1 << '\n';
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);

	int t = 1;
	// cin >> t;
	while (t--)
	{
		solve();
	}
}

1416B - Make Them Equal(思维 *2000)

  • x i xi xi 我们不好处理,但是当 i = 1 i=1 i=1 时,我们可以轻松地控制 x x x
  • 所以把所有数挪到第一个,后面的一个个分配
  • 总和不能均分为 n n n 份时输出 − 1 -1 1
#include <bits/stdc++.h>

using namespace std;

#define int long long
using i64 = long long;

typedef pair<int, int> PII;
typedef pair<int, char> PIC;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;
typedef pair<int, pair<int, bool>> PIIB;

const int N = 1e6 + 10;
const int maxn = 1e6 + 10;
const int mod = 998244353;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;

struct node {
    int i, j, x;
};

void solve()
{
    int n;
    cin >> n;
    vector<int> a(n + 1);
    int sum = 0;
    for (int i = 1; i <= n; i ++ )
    {
        cin >> a[i];
        sum += a[i];
    }
    if (sum % n != 0)
    {
        cout << -1 << '\n';
        return;
    }
    sum /= n;
    vector<node> ans;
    for (int i = 2; i <= n; i ++ )
    {
        if (a[i] % i == 0)
        {
            ans.push_back({i, 1, a[i] / i});
            a[1] += a[i];
            a[i] = 0;
        }
        else
        {
            ans.push_back({1, i, i - a[i] % i});
            ans.push_back({i, 1, a[i] / i + 1});
            a[1] += a[i];
            a[i] = 0;
        }
    }
    for (int i = 2; i <= n; i ++ )
    {
        ans.push_back({1, i, sum});
    }
    cout << ans.size() << '\n';
    for (auto t : ans) cout << t.i << ' ' << t.j << ' ' << t.x << '\n';
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);

	int t = 1;
	cin >> t;
	while (t--)
	{
		solve();
	}
}

337D - Book of Evil(树的直径/树形dp *2000)

  • 这题想到了树形dp但是没想出来具体怎么实现
  • 树形dp的模板就是两层dfs,第一层用子结点更新父结点,第二层用父结点更新子结点
  • dp[i][0/1] 表示第 i 个结点为根的子树里,最远的影响结点的距离(0表示最远距离 1表示次远距离)
  • dist[i] 表示除去第 i 个结点为根的子树,其余部分中最远的影响结点的距离
#include <bits/stdc++.h>

using namespace std;

#define int long long
using i64 = long long;

typedef pair<int, int> PII;
typedef pair<int, char> PIC;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;
typedef pair<int, pair<int, bool>> PIIB;

const int N = 1e6 + 10;
const int maxn = 1e6 + 10;
const int mod = 998244353;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;

void solve()
{
    int n, m, d;
    cin >> n >> m >> d;
    vector<bool> flag(n + 1);
    for (int i = 0; i < m; i ++ )
    {
        int x; cin >> x;
        flag[x] = true;
    }
    vector<vector<int>> g(n + 1);
    for (int i = 0; i < n - 1; i ++ )
    {
        int u, v;
        cin >> u >> v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    vector<vector<int>> dp(n + 1, vector<int>(2, -INF));
    vector<int> dist(n + 1, -INF);
    function<void(int, int)> dfs1 = [&](int u, int fa)
    {
        if (flag[u]) dp[u][0] = dp[u][1] = 0;
        for (int i = 0; i < g[u].size(); i ++ )
        {
            int v = g[u][i];
            if (v == fa) continue;
            dfs1(v, u);
            if (dp[v][0] + 1 >= dp[u][0])
            {
                dp[u][1] = dp[u][0];
                dp[u][0] = dp[v][0] + 1;
            }
            else dp[u][1] = max(dp[u][1], dp[v][0] + 1);
        }
    };
    function<void(int, int)> dfs2 = [&](int u, int fa)
    {
        for (int i = 0; i < g[u].size(); i ++ )
        {
            int v = g[u][i];
            if (v == fa) continue;
            if (dp[u][0] == dp[v][0] + 1) dist[v] = max(dist[u] + 1, dp[u][1] + 1);
            else dist[v] = max(dist[u] + 1, dp[u][0] + 1);
            dfs2(v, u);
        }
    };
    dfs1(1, -1);
    dfs2(1, -1);
    int ans = 0;
    for (int i = 1; i <= n; i ++ )
        if (dp[i][0] <= d && dist[i] <= d) ans ++ ;
    cout << ans << '\n';
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);

	int t = 1;
	// cin >> t;
	while (t--)
	{
		solve();
	}
}

算法

最大流的几个模板

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

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

相关文章

分享浏览器被hao123网页劫持,去除劫持的方式

昨天看python相关的自动化工作代码时&#xff0c;发现谷歌浏览器被hao123劫持了&#xff0c;把那些程序删了也不管用 方法1&#xff1a;删除hao123注册表&#xff0c;这个方式不太好用&#xff0c;会找不到注册表 方法2&#xff1a;看浏览器快捷方式的属性页面&#xff0c;一…

redis查询慢,你们是如何排查优化的(运维篇2)

1、开启慢查询日志 首先&#xff0c;第一步&#xff0c;你需要去查看一下 Redis 的慢日志&#xff08;slowlog&#xff09;。 Redis 提供了慢日志命令的统计功能&#xff0c;它记录了有哪些命令在执行时耗时比较久。 查看 Redis 慢日志之前&#xff0c;你需要设置慢日志的阈值。…

ESP32和ESP8266的WIFI的136个问题与答案

ESP32和ESP8266的WIFI的136个问题与答案 ESP32和ESP8266 WIFI相关问题与答案&#xff0c;具有一定的参考价值。ESP32-S3模块 1. ESP32 和 ESP8266 是否支持中文 SSID&#xff1f; ESP32 和 ESP8266 均支持中文 SSID&#xff0c;但需要使用相应的库和设置。需要注意的是&#…

PySide(PyQt)判断QLineEdit的输入是否合规

判断QLineEdit的输入是否符合要求&#xff0c;比如是否为整数或者浮点数。 1、使用正则表达式来判断 符合正则表达式则输入合规 import sys import re from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLineEdit, QLabelclass ExampleWidget(QWidget):…

Eclipse 运行程序

我们可以在 Package Explorer 视图 可以在 Package Explorer 视图中快速运行 Java 程序。 Package Explorer 视图: 鼠标右击包含 main 函数的 java 类选择 Run As > Java Application 同样你也可以在 Package Explorer 视图中选择包含 main 方法的类并按下快捷键&#x…

C++之多态使用小结

1、多态定义 1.1 多态概念 C多态性&#xff08;Polymorphism&#xff09;是面向对象编程(OOP)的一个重要特性之一&#xff0c;它允许我们使用统一的接口来处理不同类型的对象。多态性使得程序更加灵活、可扩展并且易于维护。 通俗来说&#xff0c;就是多种形态&#xff0…

期末成绩发布智能助手

期末考试的结束标志着教师们迎来了成绩处理的忙碌时期。传统的成绩单分发方式不仅耗时耗力&#xff0c;而且容易出错。幸运的是&#xff0c;易查分小程序的出现&#xff0c;为这一过程提供了一个简便而高效的解决方案。 易查分小程序是专为教师和家长设计的智能工具&#xff0…

安卓笔记1-Retrofit2请求自定义接口

1、整体功能概述 安卓项目中使用Retrofit2实现和自定义接口的网络交互&#xff0c;通过Postman模拟服务端&#xff0c;创建自定义接口。 作用 前后端开发进度对不齐时&#xff0c;客户端可利用本功能模拟测试数据。备忘。 缺点 retrofit模拟接口需要配置响应数据类&#xff…

美无定论,娜扎亦菲各自绽放你更爱哪一款?

娜扎亦菲各自绽放你更爱哪一款&#xff1f; 哎呀&#xff0c;这个问题可真是让我头疼呢&#xff0c; 就像让我在两个糖果店里选择最甜的那一颗一样难&#xff01; 古力娜扎和刘亦菲&#xff0c;两位都是娱乐圈里璀璨的明珠&#xff0c; 美得各有千秋&#xff0c;让人怎么舍得…

2024年上半年信息系统项目管理师——综合知识真题题目及答案(第1批次)(3)

2024年上半年信息系统项目管理师 ——综合知识真题题目及答案&#xff08;第1批次&#xff09;&#xff08;3&#xff09; 第41题&#xff1a;在应用集成中&#xff0c;有多个组件帮助协调连接各种应用。其中&#xff08;&#xff09;利用特定的数据结构&#xff0c;帮助开发人…

企业网络实验dhcp-snooping、ip source check,防非法dhcp服务器、自动获取ip(虚拟机充当DHCP服务器)、禁手动修改IP

文章目录 需求相关配置互通性配置配置vmware虚拟机&#xff08;dhcp&#xff09;分配IP服务配置dhcp relay&#xff08;dhcp中继&#xff09;配置dhcp-snooping&#xff08;防非法dhcp服务器&#xff09;配置ip source check&#xff08;禁手动修改IP&#xff09; DHCP中继&…

四. TensorRT模型部署优化-pruning(sparse-tensor-core)

目录 前言0. 简述1. 自动驾驶中需要关注的电力消耗2. Ampere架构中的3rd Generation Tensor core3. Sparse tensor core做矩阵乘法总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们…

【刷题汇总 -- 删除公共字符、两个链表的第一个公共结点、mari和shiny】

C日常刷题积累 今日刷题汇总 - day0121、删除公共字符1.1、题目1.2、思路1.3、程序实现 -- 蛮力法1.4、程序实现 -- 哈希 2、两个链表的第一个公共结点2.1、题目2.2、思路2.3、程序实现 -- 对齐比对法2.4、程序实现 -- 公共端点路程法 3、mari和shiny3.1、题目3.2、思路3.3、程…

Unity如何查找两个transform最近的公共parent

查找两个子对象最近的父对象 一、问题背景二、解决方案思路核心算法代码 三、总结 一、问题背景 最近看到个关于Unity的问题&#xff1a;在Hierarchy面板中的游戏对象&#xff0c;给定两个子物体transform对象&#xff0c;如何查找这两个transform最近的公共父级parent。感觉挺…

Java中常用线程安全的集合

文章目录 常用线程安全的集合CopyWriteArrayListCopyOnWriteArraySetHashTableConcurrentHashMapJDK1.7JDK1.8 常用线程安全的集合 在多线程环境中&#xff0c;数据的一致性和线程的安全性是至关重要的。传统的集合类&#xff0c;如ArrayList、HashMap和HashSet&#xff0c;在…

手撕Vue中的RouterLink和RouterView,深入理解其底层原理(一)

RouterLink和RouterView的作用 我们可以通过RouterLink绑定好指向的路径 点击就能够实现在RouterView中将页面显示出来 我们首先使用官方的vue-router展示一下效果 App.vue <template><div><router-link to"/">Home</router-link><ro…

Real User ID 和 Effective User ID 的区别

在 Unix 和 Linux 系统中&#xff0c;每个进程都有多个用户标识符&#xff08;UID&#xff09;&#xff0c;其中最重要的是“真实用户 ID”&#xff08;real UID&#xff09;和“有效用户 ID”&#xff08;effective UID&#xff09;。 它们的区别和用途如下&#xff1a; 真实…

STM32入门开发操作记录(一)——新建工程

目录 一、课程准备1. 课程资料2. 配件清单3. 根目录 二、环境搭建三、新建工程1. 载入器件支持包2. 添加模块3. ST配置4. 外观设置5. 主函数文件 一、课程准备 1. 课程资料 本记录操作流程参考自b站视频BV1th411z7snSTM32入门教程-2023版 细致讲解 中文字幕&#xff0c;课程资…

五. TensorRT API的基本使用-MNIST-model-build-infer

目录 前言0. 简述1. 案例运行2. 代码分析2.1 main函数2.2 build接口2.3 infer接口2.4 其他 总结参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习课程第五章—TensorRT API 的基…

7.13实训日志

上午 学习网络安全的过程中&#xff0c;我们深入了解了网络的不同层面和技术&#xff0c;从表层网络到深网再到暗网&#xff0c;以及涉及的产业分类和技术工具。这些知识不仅帮助我们理解网络的复杂性&#xff0c;还揭示了如何应对和防范各种网络威胁。 首先&#xff0c;我们…