[赛记] csp-s模拟7

news/2024/12/30 22:48:43/文章来源:https://www.cnblogs.com/PeppaEvenPig/p/18447716

median 50pts

错解50pts(有重复的数就不行);

赛时想容斥了,其实不用容斥(好像也不能容斥)

题解做法:将每个数存一个二元组,按大小排序,枚举每一个数作为中位数,再枚举每个位置的种类,看它前面和后面有多少这些种类的数,乘起来即可;

这样就巧妙地避免了重复的情况,如果直接枚举,则有相同的数会被重复算,而这个就直接乘 $ 0 $ 了,非常巧妙;

令 $ k $ 为种类数($ k = 5 $),那么时间复杂度为: $ O(n \times k^6) $,实际情况根本跑不满,差不多 $ k^3 $ 左右;

点击查看代码
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
#define int long long
const long long mod = 998244353;
int n;
int a[8][100005], qsum[500005][8], hsum[500005][8];
pair<int, int> b[1000005];
int cnt;
long long ans;
void w(int a, int bb, int c, int d, int e) {for (int i = 1; i <= cnt; i++) {if (b[i].second != c) continue;int o = qsum[i][a] * qsum[i][bb] % mod * hsum[i][d] % mod * hsum[i][e] % mod;ans = (ans + o * b[i].first % mod) % mod;}
}
signed main() {freopen("median.in", "r", stdin);freopen("median.out", "w", stdout);ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n;for (int j = 1; j <= 5; j++) {for (int i = 1; i <= n; i++) {cin >> a[j][i];b[++cnt] = {a[j][i], j};}}sort(b + 1, b + 1 + cnt);for (int i = 1; i <= cnt; i++) {for (int j = 1; j <= 5; j++) {qsum[i + 1][j] = qsum[i][j];}qsum[i + 1][b[i].second]++;}for (int i = cnt; i >= 1; i--) {for (int j = 1; j <= 5; j++) {hsum[i - 1][j] = hsum[i][j];}hsum[i - 1][b[i].second]++;}for (int p3 = 1; p3 <= 5; p3++) {for (int p1 = 1; p1 <= 5; p1++) {if (p1 == p3) continue;for (int p2 = p1 + 1; p2 <= 5; p2++) {if (p2 == p3) continue;for (int p4 = 1; p4 <= 5; p4++) {if (p4 == p3 || p4 == p2 || p4 == p1) continue;for (int p5 = p4 + 1; p5 <= 5; p5++) {if (p5 == p1 || p5 == p2 || p5 == p3) continue;w(p1, p2, p3, p4, p5);}}}}}cout << ans;return 0;
}

travel 0pts

赛时全输出$ Yes $ 搞了90pts,赛后绑了包0pts;

考虑题意转化,其实就是在让我们判断一个图是否有二元及以上的环或者有两个及以上的自环在同一路径上;

那么我们先用 $ Tarjan $ 缩点看一下缩点以后的点数是否等于原点数以此判断第一个,然后跑一边深搜找一下第二个即可;

时间复杂度:$ O(n + m) $;

貌似赛后数据暴搜也能过?

点击查看代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <stack>
using namespace std;
int n, m;
struct sss{int t, ne;
}e[2000005];
int h[2000005], cnt;
void add(int u, int v) {e[++cnt].t = v;e[cnt].ne = h[u];h[u] = cnt;
}
bool vis[500005], v[500005];
int vi[500005];
int dfn[500005], low[500005], dcnt;
stack<int> s;
int sum;
void Tarjan(int x) {dfn[x] = low[x] = ++dcnt;s.push(x);v[x] = true;for (int i = h[x]; i; i = e[i].ne) {int u = e[i].t;if (!dfn[u]) {Tarjan(u);low[x] = min(low[x], low[u]);} else if (v[u]) {low[x] = min(low[x], dfn[u]);}}if (dfn[x] == low[x]) {sum++;int t = 0;do {t = s.top();s.pop();v[t] = false;} while(t != x);}
}
void afs(int x, int sum) {sum += vi[x];if (sum >= 2) {cout << "Yes";exit(0);}if (vis[x]) return;vis[x] = true;v[x] = true;for (int i = h[x]; i; i = e[i].ne) {int u = e[i].t;afs(u, sum);vi[x] = max(vi[x], vi[u]);}
}
int main() {freopen("travel.in", "r", stdin);freopen("travel.out", "w", stdout);ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> n >> m;int x, y;for (int i = 1; i <= m; i++) {cin >> x >> y;if(x != y) add(x, y);else vi[x]++;}for (int i = 1; i <= n; i++) {if (!dfn[i]) Tarjan(i);}if (sum != n) {cout << "Yes";return 0;}memset(v, 0, sizeof(v));for (int i = 1; i <= n; i++) {if (!v[i]) afs(i, 0);}cout << "No";return 0;
}

game 0pts

多测,赛时全输出 $ Yes $ 又搞了90pts。。。,赛后0pts;

打打表,或者用 mapvector 打暴力( vector 存的是状态),然后就得到结论:$ n $ 是偶数且两两相等时后手赢,否则先手赢;

至于证明:证:证毕。。。

因为有排序,所以时间复杂度:$ \Theta(Tn \log n) $;

点击查看代码
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int t;
int n;
int a[500005];
int main() {freopen("game.in", "r", stdin);freopen("game.out", "w", stdout);ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> t;while(t--) {cin >> n;for (int i = 1; i <= n; i++) cin >> a[i];if (n & 1) {cout << "Yes" << '\n';continue;}sort(a + 1, a + 1 + n);bool vis = true;for (int i = 1; i <= n; i += 2) {if (a[i] != a[i + 1]) {vis = false;break;}}if (vis) cout << "No" << '\n';else cout << "Yes" << '\n';}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用ValueConverters扩展实现枚举控制页面的显示

1、ValueConverters 本库包含了IValueConverter接口的的最常用的实现,ValueConverters用于从视图到视图模型的值得转换,某些情况下,可用进行反向转换。里面有一些抽象类、模板类的定义,可以继承这些类实现一些自己想要实现的功能,方便快速。像BoolToValueConverterBase、V…

【Shiro】3.Springboot实现缓存

最近已经快速入门了Shiro。对于登录、授权、认证等方法,每次都是从数据库直接查询。如果登录的人员过多,对数据库来说,是一项压力。如何减轻数据库的压力。EhCache 实现缓存 集成 Redis 实现 Shiro 缓存(推荐使用)在此之前,我们已经简单学会EhCache 和Reids的使用。 EhCa…

织梦如何数据库备份,织梦cms网站数据怎么备份与还原

织梦CMS(DedeCMS)的数据库备份和还原是非常重要的操作,可以帮助你在出现问题时快速恢复数据。下面详细介绍如何进行织梦CMS的数据库备份和还原。 一、数据库备份 1. 使用 phpMyAdmin 备份数据库登录 phpMyAdmin登录到你的网站控制面板(如 cPanel)。 找到并打开 phpMyAdmin…

【软考】3 校验码

校验码 码距概念:任意进制的两个码值之间的最小二进制位数称为校验码的码距 例如:二进制1bit位,从0到1,则码距是1,二进制2bit位 从 00 到 11 一共4个码字,但码距还是为1 可以设置 性别男为 00 女为 11两个合法码字,则该两个合法码字的最小码距为2 (间隔 01 和 10 两个)…

IOU指标

IOU:全称 intersection over union 交并比,两个区域真实框和预测框之间的交集比他们之间的总面积-交集的 IOU指标:通常用于评估计算机视觉任务中的模型性能,特别是目标检测和图像分割。一个较高的IoU值意味着模型的定位和分割精度更好。

Redis安装管理, RDB, AOF ubuntu使用

1.1 Redis 基础redis单线程处理用户请求,不用加锁。其他线程做别的工作1.2 Redis 安装 Ubuntu 安装 Redis 范例:基于官方仓库包安装 (可以安装最新版本)#官方地址 https://redis.io/docs/install/install-redis/install-redis-on-linux/#导入key [root@ubuntu2204 ~]#curl -f…

查找和管理数据库的具体步骤

登录MySQL命令行使用SSH连接到服务器。 登录MySQL命令行:bashmysql -u root -p输入MySQL root用户的密码。查看数据库列表在MySQL命令行中查看所有数据库:sqlSHOW DATABASES;选择织梦CMS数据库选择织梦CMS使用的数据库:sqlUSE dedecmsv56gbk;查看数据库表查看织梦CMS数据库中…

DedeCMS Error Track:DedeCMS错误警告:连接数据库失败

当织梦CMS(DedeCMS)出现“连接数据库失败”的错误时,可以通过以下几个步骤进行排查和解决: 1. 检查数据库配置文件打开配置文件打开织梦CMS的数据库配置文件 include/config.inc.php。 使用FTP工具或SSH连接到服务器,然后打开该文件。检查配置信息确认数据库配置信息是否正…

SpringMVC内容

SpringMVC简介 SpringMVC(Model View Controller) 是以Servlet API为基础的 Web 框架并可以部署到 Servlet容器(比如:Tomcat),是控制层框架,主要负责与前端交互,接收前端的参数,在服务层进行交互,并把结果返回会前端页面。 SpringMVC工作原理当发送请求的时候,Dis…

Linux系统安装Pycharm专业版【附破解方法】

​写在前面 本教程适用于 Pycharm 2022.2.3 以下所有版本 一、版本信息 虚拟机产品:VMware Workstation 17 Pro 虚拟机版本:17.0.0 build-20800274 ISO映像文件:ubuntukylin-22.04-pro-amd64.iso Pycharm版本:PyCharm 2022.3.3 (Professional Edition) 资源链接:https:/…

谷歌收录批量查询,谷歌收录批量查询的方法步骤

谷歌收录批量查询是网站管理员和SEO专家常用的一种方法,用于同时查询多个页面或网站在谷歌搜索引擎中的收录情况。以下是几种常见的谷歌收录批量查询方法及其步骤: 一、使用Google Search Console(谷歌搜索控制台) 虽然Google Search Console主要面向单个网站的监控和管理,…

怎么查看网站是否被谷歌收录,查看网站是否被谷歌收录的快速检测方法

查看网站是否被谷歌收录,有多种快速检测方法可供选择。以下是一些常用的方法: 一、使用“site:”指令 打开谷歌搜索引擎:在浏览器中打开Google.com,确保使用的是谷歌的官方搜索引擎。 输入查询指令:在搜索框中输入“site:”加上你的网站域名(注意使用英文状态下的冒号,并…