当前位置: 首页 > news >正文

2023 ICPC 网络赛 第一场 部分题解 (待完善)

D Transitivity

题解:

根据题意可以推出结论: 如果存在连通块,那么这个连通块要满足条件,必然是满连通块.

一共有两种情况

1. 存在一个连通块不是满连通块

cnt表示连通块的节点个数, num表示连通块边的个数

一个连通块的贡献 = cnt*(cnt-1)/2 - num;

那么最终答案 =  连通块贡献之和

2.所有连通块都是满连通块

因为我们至少需要添加一条边,所以此时等价于我们需要把两个连通块合并.

假设连通块A有x个节点,连通块B有y个节点,那么我们需要添加 x*y条边 才能满足条件.

所以即找到 最小和次小的连通块即可,答案 = x*y

AC代码:

#include <bits/stdc++.h>
typedef long long ll;
typedef unsigned long long ull;
#define int long long
#define endl '\n'
#define bit(x) (1ll << x)
using namespace std;
const int N = 1e6 + 5;
const int inf = 1e16;
vector<int> g[N];
int sz[N];//连通块大小
int cnt[N];//边的数量
int vis[N];
void solve()
{int n,m;cin >> n >> m;for(int i = 1; i<=m; i++){int u,v;cin >> u >> v;g[u].push_back(v);g[v].push_back(u);}int Min1 = inf;//最小值int Min2 = inf;//次小auto dfs = [&](auto self, int u, int fa,int root)-> void{vis[u] = 1;sz[u] = 1;cnt[root]+=g[u].size();for(auto v: g[u]){if(vis[v]){continue;}self(self,v,u,root);sz[u]+=sz[v];}};auto cal = [&](int now, int sum)//计算贡献{return sum*(sum-1)/2 - now;};int ans = 0;int f = 0;for(int i = 1; i<=n; i++){if(vis[i]){continue;}dfs(dfs,i,-1,i);cnt[i]/=2;int val = cal(cnt[i],sz[i]);//连通块的贡献if(val != 0){ans+=val;f = 1;}else{if(sz[i] < Min1){Min2 = Min1;Min1 = sz[i];}else if(sz[i] <=Min2){Min2 = sz[i];}}}if(f){cout << ans << endl;}else{cout << Min1*Min2 << endl;}
}signed main()
{ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t = 1;//cin >> t;while (t--){solve();}return 0;
}

A Qualifiers Ranking Rules

题解: 

按照题意模拟即可

#include <bits/stdc++.h>
typedef long long ll;
typedef unsigned long long ull;
#define int long long
#define endl '\n'
#define bit(x) (1ll << x)
using namespace std;
const int N = 1e6 + 5;
const int inf = 1e16;
struct node
{string s; // 学校名称int rank; // 比赛名次int t;node(string x, int y, int _t){s = x;rank = y;t = _t;}
};
int cmp(node a, node b)
{if (a.rank == b.rank){return a.t < b.t;}return a.rank < b.rank;
}
void solve()
{int n, t;cin >> n >> t;map<string, int> vis;vector<node> pos1;int cnt = 1;for (int i = 1; i <= n; i++){string s;cin >> s;if (vis.count(s)){continue;}pos1.push_back({s, cnt, 1});vis[s] = 1;cnt++;}cnt = 1;vis.clear();for (int i = 1; i <= t; i++){string s;cin >> s;if (vis.count(s)){continue;}pos1.push_back({s, cnt, 2});cnt++;vis[s] = 1;}vis.clear();sort(pos1.begin(), pos1.end(), cmp);for (int i = 0; i < pos1.size(); i++){if (vis.count(pos1[i].s)){continue;}cout << pos1[i].s << endl;vis[pos1[i].s] = 1;}
}
signed main()
{ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t = 1;// cin >> t;while (t--){solve();}return 0;
}

L KaChang!

题解: 找到最大的数Max,输出  max(2ll,(int)ceil(1.0*Max/k)) 即可

void solve()
{int n,k;cin >> n >> k;int Max = 0;for(int i = 1; i<=n; i++){int x;cin >> x;Max = max(Max,x);}cout << max(2ll,(int)ceil(1.0*Max/k)) << endl;;
}

I Pa?sWorD

题解:

设dp[i][S][ch] 表示只看前i个字母,且当前字符的出现状态为S,且最后一个字母是ch的方案数

(下面这些事伪代码,看不懂的可以直接看代码,有详细注释)

1.当前是 大写字母
dp[i][S| bit(2)][ch1] += dp[i-1][S][ch2];//其中ch2 != ch1  即上一层所有字符的方案数 - 上一层ch1的方案数

1.当前是 小写字母

(1)大写字母
dp[i][S| bit(2)][ch1] += dp[i-1][S][ch2];//其中ch2 != ch1  即上一层所有字符的方案数 - ch1的方案数


(2)填小写字母
dp[i][S| bit(1)][ch1] += dp[i-1][S][ch2];//其中ch2 != ch1  即上一层所有字符的方案数 - ch1的方案数

1.当前是 数字
dp[i][S| bit(0)][ch1] += dp[i-1][S][ch2];//其中ch2 != ch1  即上一层所有字符的方案数 - ch1的方案数


1.当前是 问号
枚举当前字符ch1,  t表示当前字母是谁
dp[i][S| bit(t)][ch1] += dp[i-1][S][ch1];//其中ch2 != ch1  即上一层所有字符的方案数 - ch1的方案数

AC代码:  

#include <bits/stdc++.h>
typedef long long ll;
typedef unsigned long long ull;
#define int long long
#define endl '\n'
#define bit(x) (1ll << x)
using namespace std;
const int N = 1e6 + 5;
const int inf = 1e16;
const int MOD = 998244353;
int add(int x, int y)
{x += y;while (x >= MOD)x -= MOD;while (x < 0)x += MOD;return x;
}int sub(int x, int y)
{return add(x, MOD - y);
}int mul(int x, int y)
{return (x * 1ll * y) % MOD;
}int binpow(int x, int y)
{int z = 1;while (y > 0){if (y % 2 == 1)z = mul(z, x);x = mul(x, x);y /= 2;}return z;
}int inv(int x)
{return binpow(x, MOD - 2);
}int divide(int x, int y)
{return mul(x, inv(y));
}int my_hash(char ch)//对字符进行哈希
{if (ch >= 'a' && ch <= 'z'){return ch - 'a' + 10;}else if (ch >= 'A' && ch <= 'Z'){return ch - 'A' + 36;}else{return ch - '0';}
}
int pos(int ch)//当前字符在二进制中的位置
{if (ch >= 10 && ch <= 35) // 小写表示第1位{return 1;}else if (ch >= 36 && ch <= 61) // 大写表示第2位{return 2;}else // 数字表示第0位{return 0;}
}int dp[2][10][70]; // 当前状态为S且最后一个字符是 ch 的方案数
int last[10];      // 状态为S时 所有的字符方案数之和
void solve()
{int n;cin >> n;string s;cin >> s;s = " " + s;//初始化部分int S = 0;int now;int ch; // 当前填入的字符编号if (s[1] == '?'){for (ch = 0; ch <= 61; ch++) // 当前填入ch{now = S | bit(pos(ch)); // 填入s[i]后,当前的二进制状态dp[1][now][ch] = 1;}}else{now = S | bit(pos(my_hash(s[1]))); // 填入s[i]后,当前的二进制状态ch = my_hash(s[1]);dp[1][now][ch] = 1; // 加上全部的if (s[1] >= 'a' && s[1] <= 'z')//如果是小写字母,还可以是大写字母{now = S | bit(pos(my_hash(s[1]) + 26)); // 填入s[i]后,当前的二进制状态ch = my_hash(s[1]) + 26;                // 填大写字母dp[1][now][ch] = 1;                     // 加上全部的}}for (int i = 2; i <= n; i++){for (int S = 0; S < 8; S++)//{int sum = 0;for (int ch = 0; ch <= 61; ch++){dp[0][S][ch] = dp[1][S][ch]; // 滚动数组dp[1][S][ch] = 0;            // 进行初始化sum = add(sum, dp[0][S][ch]);//表示上一层状态为S的所有字符的方案数}last[S] = sum; // 表示上一层状态为S的所有字符的方案数}for (int S = 0; S < 8; S++) // 枚举上一层的状态{int now;//表示填入字符后的状态int ch; // 当前填入的字符编号if (s[i] == '?'){for (ch = 0; ch <= 61; ch++) // 当前填入ch{now = S | bit(pos(ch));                             // 填入s[i]后,当前的二进制状态dp[1][now][ch] = add(dp[1][now][ch], last[S]);      // 加上全部的dp[1][now][ch] = sub(dp[1][now][ch], dp[0][S][ch]); // 相邻不能相同,减去}}else{now = S | bit(pos(my_hash(s[i]))); // 填入s[i]后,当前的二进制状态ch = my_hash(s[i]);dp[1][now][ch] = add(dp[1][now][ch], last[S]);      // 加上全部的dp[1][now][ch] = sub(dp[1][now][ch], dp[0][S][ch]); // 相邻不能相同,减去if (s[i] >= 'a' && s[i] <= 'z') // 填入大写的{now = S | bit(pos(my_hash(s[i]) + 26)); // 填入s[i]后,当前的二进制状态ch = my_hash(s[i]) + 26;dp[1][now][ch] = add(dp[1][now][ch], last[S]);      // 加上全部的dp[1][now][ch] = sub(dp[1][now][ch], dp[0][S][ch]); // 相邻不能相同,减去}}}}int ans = 0;for (int ch = 0; ch <= 61; ch++){ans = add(ans, dp[1][7][ch]);}cout << ans << endl;
}
signed main()
{ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t = 1;// cin >> t;while (t--){solve();}return 0;
}

相关文章:

2023 ICPC 网络赛 第一场 部分题解 (待完善)

D Transitivity 题解: 根据题意可以推出结论: 如果存在连通块,那么这个连通块要满足条件,必然是满连通块. 一共有两种情况 1. 存在一个连通块不是满连通块 设cnt表示连通块的节点个数, num表示连通块边的个数 一个连通块的贡献 cnt*(cnt-1)/2 - num; 那么最终答案 连…...

Hadoop的HDFS高可用方案

一、Hadoop高可用简介 Hadoop 高可用 (High Availability) 分为 HDFS 高可用和 YARN 高可用&#xff0c;两者的实现基本类似&#xff0c;但 HDFSNameNode 对数据存储及其一致性的要求比 YARN ResourceManger 高得多&#xff0c;所以它的实现也更加复杂 1、HDFS系统高可用简介…...

【计算机基础】让我们重新认识一下Visual Stduio及其操作,知识点汇总!!

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…...

使用Node构建私人代理池

在进行大规模数据采集时&#xff0c;经常会遇到网站反爬虫机制导致爬虫被封的问题。为了解决这个困扰&#xff0c;本文将向大家介绍如何利用Node.js构建私人代理池&#xff0c;提供稳定的代理&#xff0c;实现高效、可靠的爬虫操作。跟随本文一起学习&#xff0c;拥有解封爬虫的…...

2023年“羊城杯”网络安全大赛 决赛 AWDP [Break+Fix] Web方向题解wp 全

终于迎来了我的第一百篇文章。 这次决赛赛制是AWDP。BreakFix&#xff0c;其实就是CTFFix&#xff0c;Fix规则有点难崩。Break和Fix题目是一样的。 总结一下&#xff1a;败北&#xff0c;还是太菜了得继续修炼一下。 一、Break ezSSTI 看到是SSTI&#xff0c;焚靖直接一把梭…...

如何用好免费的ChatGPT

如何用好免费的ChatGPT 前言ChatGPT使用入口在线体验地址&#xff1a;点我体验 ChatGPT介绍ChatGPT初级使用技巧初级使用技巧&#xff1a;清晰明了的问题表达 ChatGPT中级使用语法中级使用语法&#xff1a;具体化问题并提供背景信息 ChatGPT高级使用高级使用&#xff1a;追问、…...

golang 实现带令牌限流的JWT demo

demo里提供了三个接口&#xff0c;认证取token&#xff0c;刷新token&#xff0c;获取信息&#xff0c;token过期前也会在header里写上新token&#xff08;便于客户端更换&#xff09; package mainimport ("fmt""net/http""sync""time&qu…...

【web开发】9、Django(4)ajax请求

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、Ajax是什么&#xff1f;二、使用步骤二、订单管理 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、Ajax是什么&#xff1f; Ajax&…...

消息队列中,如何保证消息的顺序性?

本文选自&#xff1a;advanced-java 作者&#xff1a;yanglbme 问&#xff1a;如何保证消息的顺序性&#xff1f; 面试官心理分析 其实这个也是用 MQ 的时候必问的话题&#xff0c;第一看看你了不了解顺序这个事儿&#xff1f;第二看看你有没有办法保证消息是有顺序的&#xf…...

Shell别名的使用方法及管理技巧

文章目录 1. 引言1.1 概述1.2 目的1.3 适用范围 2. Shell和别名2.1 Shell简介2.2 别名的作用2.3 别名的语法 3. 创建别名3.1 临时别名3.2 永久别名 4. 别名的应用4.1 简化命令4.2 自定义命令4.3 提高工作效率 5. 管理别名5.1 查看别名5.2 修改别名5.3 删除别名 6. 实例演示6.1 …...

C/C++选择题好题分享

...

kafka副本机制

目录 前言 副本定义 副本角色 In-sync Replicas&#xff08;ISR&#xff09; 参考资料 前言 现在的很多的分布式系统都支持副本的机制&#xff0c;比如Mysql就有副本的机制&#xff0c;一般使用副本有如下特性和好处。 提供数据冗余。即使系统部分组件失效&#xff0c;系…...

服务注册发现_actuator微服务信息完善

SpringCloud体系里的&#xff0c;服务实体向eureka注册时&#xff0c;注册名默认是IP名:应用名:应用端口名。 问题&#xff1a; 自定义服务在Eureka上的实例名怎么弄呢 在服务提供者pom中配置Actuator依赖 <!-- actuator监控信息完善 --> <dependency><groupId…...

常见列表字典排序

一、列表排序 demoList [1, 3, 2, 4, 9 ,7]res sorted(demoList) # 默认升序# 降序 # res sorted(demoList, reverseTrue)print(res)二、字典排序 demoDict {"篮球": 5, "排球": 9, "网球": 6, "足球": 3}# sorted排序 res so…...

【Acwing1027】方格取数(动态规划)题解

题目描述 思路分析 错误思路&#xff1a; 贪心法&#xff0c;先走一次求出最大值&#xff0c;把走过的路上面的数值清零&#xff0c;然后用同样的方法再走一遍求最大值&#xff0c;然后让这两个最大值相加就是最后的结果。 很多人在看到这个题目的时候会有上面的思路&#x…...

合并区间:解决区间重叠问题的高效算法

合并区间&#xff1a;解决区间重叠问题的高效算法 leetcode 56. 合并区间 合并区间是一个常见的编程问题&#xff0c;通常涉及到一组区间&#xff0c;你需要将重叠的区间合并成更大的区间。这篇博客将介绍这个问题的背景&#xff0c;然后解释一个高效的解决方案&#xff0c;同…...

万字总结HTML超文本标记语言

一、前言:什么是网页? 网站是指在因特网上根据一定的规则,使用 HTML 等制作的用于展示特定内容相关的网页集合。网页是网站中的一“页”,通常是 HTML 格式的文件,它要通过浏览器来阅读。 网页是构成网站的基本元素,它通常由图片、链接、文字、声音、视频等元素组成。通常…...

Java线程池是如何保证核心线程不被销毁的

来源: Java线程池是如何保证核心线程不被销毁的_朝 花 拾 夕的博客-CSDN博客 对于Java中 Thread 对象&#xff0c;同一个线程对象调用 start 方法后&#xff0c;会在执行完run 后走向终止&#xff08;TERMINATED&#xff09;状态&#xff0c;也就是说一个线程对象是不可以通过多…...

新课程标准培养学生“高考物理关键能力”的实践研究课题文献综述

目录 一、高考物理能力的要求与评估标准 二、高考物理关键能力的定义与内涵...

急救车工业路由器应用提升急救效率:车联网、数据采集与远程诊疗

急救车作为医院里医疗急救过程中的重要组成部分&#xff0c;在智慧医疗物联网领域中急救车应用4G工业路由器实现网络部署与数据采集&#xff0c;通过工业4G路由器能够实时采集到病患的生理数据、救护现场音频与视频、GPS定位以及车辆运行状态等重要信息。这些数据将被传输到医疗…...

【操作系统】聊聊CPU上下文切换实操

如何查看系统的上下文切换情况 上一篇文章我们说了过多的上下文切换&#xff0c;会把CPU时间消耗在寄存器、内核栈以及虚拟内存等数据的保存和恢复上&#xff0c;那么当出现系统的上下文切换过多的时候&#xff0c;我们如果通过监控指标查看呢。 vmstat 是一个常用的系统性能…...

【java】【SpringBoot】【四】原理篇 bean、starter、核心原理

目录 一、自动配置 1、bean加载方式&#xff08;复习&#xff09; 1.1 加载方式-xml方式生命bean 1.2 加载方式-xml注解方式声明bean 1.3 注解方式声明配置类 1.4 FactoryBean 1.5 proxyBeanMethod属性 1.6 使用Import注解导入 1.7 使用上下文对象在容器初始化完毕后注…...

【精品资源】Java毕业设计攻略:从选题到答辩,一站式指南

导读&#xff1a; Java毕业设计是计算机科学与技术专业学生展示其编程能力、问题解决能力和创新思维的重要环节。这篇博客将为您提供一站式的Java毕业设计攻略&#xff0c;帮助您从选题到答辩&#xff0c;顺利完成毕业设计。 一、选题阶段 寻找灵感&#xff1a; 探讨热门技术如…...

文件高效批量重命名,轻松重命名不同类型的文件名并隐藏编号

你是否曾经因为文件名混乱而感到困扰&#xff1f;你是否希望有一种方法可以快速、简单地管理你的文件名&#xff1f;如果你的答案是肯定的&#xff0c;那么我们的产品——文件重命名工具&#xff0c;将是你的完美解决方案&#xff01; 首先我们要进入文件批量改名高手主页面&a…...

接口的定义与实现

一个c&#xff0c;代表类&#xff08;class&#xff09;。 一个c再加上两竖线&#xff0c;代表抽象类。 一个i&#xff0c;代表接口&#xff08;interface&#xff09;。 package com.mypackage.oop.demo12;//接口都需要有一个实现类 public interface UserService {//接口中定…...

浅谈低压绝缘监测及定位系统在海上石油平台的研究与应用

安科瑞 华楠 摘要&#xff1a;海上石油平台低压系统与陆地电力系统有很大区别&#xff0c;其属于中性点绝缘系统&#xff0c;在出现单相接地故障时&#xff0c;系统允许带故障正常运行2 h&#xff0c;保证海上重要电气设备不会立即关停。现以渤海某海上平台为例&#xff0c;其…...

Java项目:SSM的食堂点餐系统

作者主页&#xff1a;Java毕设网 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 一、相关文档 系统中的核心用户是系统管理员&#xff0c;管理员登录后&#xff0c;通过管理员菜单来管理后台系统。主要功能有&#xff1a;个人中心、用户管理…...

Linux桌面环境中应用程序无法启动图形交互界面

现象&#xff1a; 点击永中office或者金山office快捷图标无法启动对应的程序。 从命令行执行对应的程序则提示 按照提示安装组件 再次执行命令行程序 原因探析&#xff1a; /opt/Yozosoft/Yozo_Office/Yozo_Writer.bin: error while loading shared libraries: libgdk-x11-2.0.…...

jupyter notebook进不去指定目录怎么办?

首先激活你要使用的虚拟环境 刚开始是现在 (base) C:\Users\lenovo>目录下 直接输入你想进入的盘 (base) C:\Users\lenovo>e:此时再cd (base) C:\Users\lenovo>cd E:\tim\learn_pytorch 就可以进入了 安装3.4.1.15问题 已经有了最新python版本的虚拟环境&#…...

MySQL 高级(进阶) SQL 语句(二) -----存储过程

目录 1 存储过程 1.1 创建存储过程​ 1.2 调用存储过程 1.3 查看存储过程 1.4 存储过程的参数 1.5 修改存储过程 1.6 删除存储过程 2 条件语句 3 循环语句 1 存储过程 存储过程是一组为了完成特定功能的SQL语句集合。 存储过程在使用过程中是将常用或者复杂的工作预…...

网站建设wordpress比较/品牌营销策略有哪些方法

vue中过滤器的使用 vue中过滤器分为全局跟组件内两种&#xff0c;此处使用的是组件内的过滤器。 filters: { //过滤器的名称为dataFormat&#xff0c;处理的数据为msg&#xff0c;最终返回一个数据即可。dataFormat(msg) {const attrList [];for (var i 0; i < msg.leng…...

如何做招生网站/短链接

1. electron&#xff1a;跨平台&#xff0c;离线优先的桌面端开发框架。 2. electron是由俩种进程组成&#xff0c;包括主进程和0个或n个渲染进程。 2.1 主进程&#xff1a;承担应用的生命周期&#xff08;包括启动&#xff0c;退出&#xff0c;准备&#xff0c;正在切换到后台…...

橙子建站官网联系电话/教育培训报名

1、如何打开一个文件&#xff1a; 使用open()函数,注&#xff1a;文件名要手打&#xff0c;从windows路径复制过来没用 >>> f open(E:/test.txt, w) # A >>> f open(E://test.txt, w) # C >>> f open(E:\\test.txt, w) # D open有两个参数&a…...

网站添加微信支付功能/企业seo外包公司

习题3.11 表达式转换 (25 point(s)) 原题链接 这道题要求特别多&#xff0c;会有很多很多坑点 下面给出我自己的accept代码&#xff1a; #include<stdio.h> #include<iostream> #include<string> using namespace std; const int Maxsize 10010; int Hash…...

网站首页全屏怎么做/网页游戏

用python实现旋转地球先上效果图素材本文只讲最简单也是最常见的正侧面旋转地球。首先你得有一张360度贴图&#xff0c;效果如下图。在网上搜一下&#xff0c;这种图很多&#xff0c;容易获得。它的特点是高度恰好是宽度的一半&#xff0c;因为地球一周有360度&#xff0c;而从…...

免费模板下载word/seo优化培训课程

From:http://sns.clnchina.com.cn/space.php?uid390057&doblog&id3564 http://support.huawei.com/ecommunity/bbs/10152379.html胖AP&#xff1a;除无线接入功能外&#xff0c;一般具备WAN、LAN两个接口&#xff0c;多支持DHCP服务器、DNS和MAC地址克隆&#xff0c;以…...