2024.1.23 寒假训练记录(6)

news2024/11/24 18:29:31

记录一个训练赛踩的大坑:往函数里传vector一定要加引用!犯了三次的错误还是记不住,服了,一道题调了一个小时。

文章目录

  • CF 1490E Accidental Victory
  • CF 1753B Factorial Divisibility
  • CF 1454E Number of Simple Paths
  • AT ARC148A mod M
  • CF 1854B Earn or Unlock
  • CF 1055A Metro
  • CF 460C Present
  • CF 894A QAQ

CF 1490E Accidental Victory

题目链接

从后往前看,每个数加上前面的所有数能不能超过后一个数,一旦有一个数不行了就直接输出前面的数即可(注意开longlong啊啊啊)

#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> PII;

#define int long long

void solve()
{
	int n;
	cin >> n;
	vector<PII> a(n + 1);
	for (int i = 1; i <= n ;i  ++)
	{
		cin >> a[i].first;
		a[i].second = i;
	}
	sort(a.begin(), a.end());
	vector<int> pre(n + 1);
	for (int i = 1; i <= n; i ++) pre[i] = pre[i -1 ] +a[i].first;
	vector<int> per;
	per.push_back(a[n].second);
	for (int i = n - 1; i > 0; i -- )
	{
		if (pre[i] >= a[i + 1].first) per.push_back(a[i].second);
		else break;
	}
	sort(per.begin(), per.end());
	cout << per.size() << '\n';
	for (auto i : per) cout << i << ' ';
	cout << '\n';
}

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

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

CF 1753B Factorial Divisibility

题目链接

太毒瘤了这题赛时想了老半天

先记录下分子上每个数字出现的次数然后合并,比如说3个2!就合并成一个3!这样,看最后能不能都合并成x!的倍数即可

#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> PII;

#define int long long

void solve()
{
	int n, x;
    cin >> n >> x;
    map<int, int> mp;
    for (int i = 0; i < n; i ++ )
    {
        int kk; cin >> kk;
        mp[kk] ++ ;
    }
    for (auto &i : mp)
    {
        if (i.first == x)
        {
            cout << "YES\n";
            return;
        }
        if (i.second % (i.first + 1) != 0) 
        {
            cout << "NO\n";
            return;
        }
        else
        {
            mp[i.first + 1] += i.second / (i.first + 1);
        }
    }
    cout << "YES\n";
}

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

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

CF 1454E Number of Simple Paths

题目链接

晚上补题的时候发现比想象中简单,好可惜赛时没做这题啊

n个顶点n条边的图我们叫做基环树,可以想象它长这样:
在这里插入图片描述
我们先记录环上的点,每个环上的点引出去的子树中,两点之间都只有一条路径,然后子树和其他点之间都有两条路径(因为有个环),可以循环计算每个子树,答案累加即可

#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> PII;

#define int long long

void solve()
{
	int n;
    cin >> n;
    vector<vector<int>> g(n + 1);
    vector<int> in(n + 1);
    for (int i = 0 ;i < n; i ++ )
    {
        int a, b;
        cin >> a >> b;
        g[a].push_back(b);
        g[b].push_back(a);
        in[a] ++ , in[b] ++ ;
    }
    queue<int> q;
    for (int i = 1; i <= n; i ++ ) 
    {
        if (in[i] == 1) q.push(i);
    }
    while (q.size())
    {
        auto t = q.front();
        q.pop();
        for (int i = 0; i < g[t].size(); i ++ )
        {
            int j = g[t][i];
            in[j] -- ;
            if (in[j] == 1) q.push(j);
        }
    }
    vector<int> huan;
    vector<int> st(n + 1);
    for (int i = 1; i <= n; i ++ )
    {
        if (in[i] > 1)
        {
            huan.push_back(i);
            st[i] = true;
        }
    }
    int ans = 0, sumtmp, sum = 0;
    vector<bool> visited(n + 1);
    function<void(int, int)> dfs = [&](int u, int fa)
    {
        sumtmp ++ ;
        if (visited[u]) return;
        visited[u] = true;
        for (int i = 0; i < g[u].size(); i ++ )
        {
            int j = g[u][i];
            if (j == fa || visited[j] || st[j]) continue;
            dfs(j, u);
        }
        return;
    };
    for (auto i : huan)
    {
        sumtmp = 0;
        dfs(i, -1);
        ans += sumtmp * (sumtmp - 1) / 2;
        ans += (sumtmp - 1) * (n - sumtmp - sum) * 2;
        sum += sumtmp - 1;
    }
    ans += huan.size() * (huan.size() - 1);
    cout << ans << '\n';
}

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

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

AT ARC148A mod M

题目链接

受到之前cf有场div2的启发,当xy模mod余数相同,等价于x与y之差是mod的倍数

所以首先判断是否全为偶数,如果全是偶数直接除以2就可以

如果不是偶数,最差的情况是除以2,有的是1有的是0,然后再看一下能不能让所有数全部相同,我们就计算相邻两数之差取gcd,如果gcd是1就不能让所有数全相同,不是1直接除以那个gcd就可以让所有数全相同了

#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> PII;

#define int long long

void solve()
{
	int n;
	cin >> n;
	vector<int> a(n);
	int cnt0 = 0, cnt1 = 0;
	for (int i = 0; i < n; i ++ )
	{
		cin >> a[i];
		if (a[i] % 2 == 0 ) cnt0 ++ ;
		else cnt1 ++ ;
	}
	if (cnt0 == n) cout << 1 << '\n';
	else
	{
		sort(a.begin(), a.end());
		int tmp = a[1] - a[0];
		for (int i = 2; i < n; i ++ ) tmp = __gcd(tmp, a[i] - a[i - 1]);
		if (tmp == 1) cout << 2 << '\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();
	}
}

CF 1854B Earn or Unlock

题目链接

dp+bitset优化

如果我们可以到第 i 张牌,那我们得到的积分就是 a[1] + a[2] + … + a[i] - (i - 1),为什么是这么多呢,因为前面 i 张牌得到的积分是 a[1] 加到 a[i],然后我们为了到第 i 张,还需要花费 i - 1(第一张思免费送给我们的)

现在问题就变成了判断能否到 i 的位置,用bitset记录,如果可以到 i 的位置就把 dp[i] 赋为 1,到第 i 位就更新ans,要注意更新完之后要把 dp[i] 恢复成 0(因为有后效性,如果不清空,后面的操作就会把当前位的1往后挪)

#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> PII;

#define int long long

const int N = 200010;

void solve()
{
	int n;
    cin >> n;
    vector<int> a(n);
    for (int i = 0; i < n; i ++ ) cin >> a[i];
    bitset<N> dp;
    dp[0] = 1;
    n <<= 1;
    int sum = 0, ans = 0;
    for (int i = 0; i < n; i ++ )
    {
        if (i < n / 2)
        {
            dp |= (dp << a[i]);
            sum += a[i];
        }
        if (dp[i])
        {
            ans = max(ans, sum - i);
            dp[i] = 0;
        }
    }
    cout << ans << '\n';
}

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

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

CF 1055A Metro

题目链接

用Dijkstra做的,dfs应该也可以

#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> PII;

void solve()
{
	int n, s;
	cin >> n >> s;
	vector<int> a(n + 1), b(n + 1);
	for (int i = 1; i <= n; i ++ ) cin >> a[i];
	for (int i = 1; i <= n; i ++ ) cin >> b[i];

	vector<vector<int>> g(n + 1);
	int last = -1;
	for (int i = 1; i <= n; i ++ )
	{
		if (a[i] == 1 && last != -1) g[last].push_back(i), last = i;
		else if (a[i] == 1) last = i; 
	}
	last = -1;
	for (int i = n; i > 0; i -- )
	{
		if (b[i] == 1 && last != -1) g[last].push_back(i), last = i;
		else if (b[i] == 1) last = i; 
	}
	priority_queue<PII, vector<PII>, greater<PII>> q;
	vector<int> dist(n + 1, 0x3f3f3f3f);
	dist[1] = 0;
	q.push(make_pair(0, 1));
	vector<bool> st(n + 1);
	while (q.size())
	{
		auto t = q.top();
		q.pop();
		int dd = t.first, ver = t.second;
		if (st[ver]) continue;
		st[ver] = true;
		for (int i = 0; i < g[ver].size(); i ++ )
		{
			int j = g[ver][i];
			if (dist[j] > dist[ver] + 1)
			{
				dist[j] = dist[ver] + 1;
				q.push(make_pair(dist[j], j));
				if (j == s)
				{
					cout << "YES\n";
					return;
				}
			}
		}
	}
	if (dist[s] == 0x3f3f3f3f) cout << "NO\n";
	else cout << "YES\n";
}

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

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

CF 460C Present

题目链接

二分+树状数组

#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> PII;

#define int long long

inline int lowbit(int x)
{
	return x & -x;
}

void solve()
{
	int n, m, w;
	cin >> n >> m >> w;
	vector<int> tr(n + 1), a(n + 1);
	int minn = 0x3f3f3f3f, maxx = 0;
	for (int i = 1; i <= n; i ++ )
	{
		cin >> a[i];
		maxx = max(maxx, a[i]);
		minn = min(minn, a[i]);
	}
	auto add = [&](int i, int x, vector<int> &tr)
	{
		for (; i <= n; i += lowbit(i))
			tr[i] += x;
	};
	for (int i = 1; i <= n; i ++ ) add(i, a[i] - a[i - 1], tr);

	vector<int> notav;
	auto presum = [&](int i, vector<int> &tmp)
	{
		int res = 0;
		for (; i > 0; i -= lowbit(i)) res += tmp[i];
		return res;
	};

	auto check = [&](int mid)
	{
		vector<int> tmp(tr);
		int cnt = 0;
		for (int i = 1; i <= n; i ++ )
		{
			if (presum(i, tmp) < mid)
			{
				if (cnt == m) return false;
				add(i, 1, tmp);
				add(i + w, -1, tmp);
				cnt ++ ;
				i -- ;
			}
		}
		return true;
	};
	
	int l = minn, r = 1e10;
	while (l < r)
	{
		int mid = l + r + 1 >> 1;
		if (check(mid)) l = mid;
		else r = mid - 1;
	}
	cout << r << '\n';
}

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

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

CF 894A QAQ

题目链接

大水题

#include <bits/stdc++.h>

using namespace std;

void solve()
{
	string s;
	cin >> s;
	int ans = 0;
	for (int i = 0; i < s.size(); i ++ )
	{
		if (s[i] == 'Q')
		{
			for (int j = i + 1; j < s.size(); j ++ )
			{
				if (s[j] == 'A')
				{
					for (int k = j + 1; k < s.size(); k ++ )
					{
						if (s[k] == 'Q')
						{
							ans ++ ;
							continue;
						}
					}
				}
			}
		}
	}
	cout << ans << '\n';
}

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

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

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

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

相关文章

ImportError: The Qt version imported is 5.9.7 but Matplotlib requires Qt>=5.12

一、错误描述 ImportError: The Qt version imported is 5.9.7 but Matplotlib requires Qt>5.12 在用python中的plt包进行绘图时对plt进行了更新&#xff0c;更新之后再运行以前的代码就出现了这个问题。 二、bug消除 &#xff08;一&#xff09;解决方法——升级pyqt包…

Java面试题之基础篇

文章目录 一&#xff1a;谈谈你对面向对象的理解二&#xff1a;JDK、JRE、JVM三者区别和联系三&#xff1a;和equals比较四&#xff1a;hashCode与equals五&#xff1a;final六&#xff1a;String、StringBuffer、StringBuilder七&#xff1a;重载与重写的区别&#xff1f;八&a…

【云原生】认识docker容器操作命令

目录 一、容器操作命令 1、创建容器 2、删除容器以及停止容器运行 3、查看容器的运行状态 4、查看容器的详细信息 5、将容器的文件传输到宿主机以及将宿主机的文件传输到容器中 6、批量删除容器 7、进入容器 二、容器的迁移 1、先在容器中创建测试文件 2、将容器存储…

永磁同步电机矢量控制原理

永磁同步电机数学模型 永磁同步电机的磁场定向控制

宝塔面板部署MySQL并结合内网穿透实现公网远程访问本地数据库

文章目录 前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道 4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 宝塔面板的简易操作性,使得运维难度降低,简化了Linux命令行进行繁琐的配置,下面简单几步,通过宝塔面板cp…

x-cmd pkg | ascii-image-converter - 图像转 ASCII 艺术照工具

目录 简介首次用户功能特点竞品和相关作品进一步阅读 简介 ascii-image-converter 是图像转换工具&#xff0c;用于将图像转换为 ascii art 图片并在控制台上打印。 首次用户 使用 x env use ascii-image-converter 即可自动下载并使用 在终端运行 eval "$(curl https:/…

部署 IT 资产管理系统 GLPI

一、GLPI 介绍 GLPI 简介 参考&#xff1a;https://github.com/glpi-project/glpi GLPI 是一款开源的 IT 资产管理和服务台软件&#xff0c;可以帮助组织管理和跟踪 IT 资产、故障、变更、问题等。 使用 Docker 来部署 GLPI 可以简化安装和配置过程&#xff0c;并提供一个独立…

透明拼接屏代工:专业制造与质量保证

透明拼接屏代工是指专业的代工厂家根据客户的需求&#xff0c;为其生产透明拼接屏产品。随着透明拼接屏市场的不断扩大&#xff0c;越来越多的企业选择通过代工方式快速进入市场。尼伽小编将深入探讨透明拼接屏代工的优势、选择合适的代工厂家以及质量保证等方面的内容。 一、透…

[C语言]百行代码实现通讯录(进阶篇)

目录 前言&#xff1a; 1.进阶通讯录特点&#xff1a; 2.实现步骤&#xff1a; &#xff08;1&#xff09;定义一个结构体来存储联系人的基本信息例如&#xff1a;名字、电话、性别等 &#xff1b; &#xff08;2&#xff09;定义另一个结构体来封装联系人及其个数以及记录…

C语言零基础入门第1天《什么是C语言?》

C语言零基础入门第1天《什么是C语言&#xff1f;开篇点题》 1、什么是C语言2、为什么要使用 C&#xff1f;3、C有哪些好处、优点&#xff1f; 4、C排行榜排名5、C语言为什么是编程语言的神&#xff1f;6、鼓励你&#xff0c;为你叫好&#xff01; C语言——编程之本&#xff0c…

vulhub之Zabbix篇

CVE-2016-10134--SQL注入 一、漏洞介绍 zabbix是一款服务器监控软件&#xff0c;其由server、agent、web等模块组成&#xff0c;其中web模块由PHP编写&#xff0c;用来显示数据库中的结果。 漏洞环境 在vulhub靶场进行复现&#xff0c;启动zabbix 3.0.3。 二、复现步骤 1…

L1-096 谁管谁叫爹(Java)

《咱俩谁管谁叫爹》是网上一首搞笑饶舌歌曲&#xff0c;来源于东北酒桌上的助兴游戏。现在我们把这个游戏的难度拔高一点&#xff0c;多耗一些智商。 不妨设游戏中的两个人为 A 和 B。游戏开始后&#xff0c;两人同时报出两个整数 NA 和 NB。判断谁是爹的标准如下&#xff1a; …

一文让你彻底搞懂cookie和session产生漏洞的原理

首先让我们来看看登录的一般流程&#xff1a; 输入账号密码提交给后端&#xff1b;后端进行判断账号密码是否一致&#xff0c;这里的逻辑根据每个程序员的想法去写&#xff1b;如果通过2登录成功&#xff0c;跳转登录成功的页面&#xff1b; 如果通过2登录失败&#xff0c;跳转…

每日一题——LeetCode1309.解码字母到整数映射

方法一 个人方法&#xff1a; 由题意可得&#xff1a; 1、1-26对应a-z&#xff0c;只不过从10开始&#xff0c;后面要加#才能表示字母 2、10# - 26# 都是三位数&#xff0c;开头<2&#xff0c;结尾都为# 3、某个数后面两位如果不为#那么该数为1-9对应a-i&#xff0c;如果…

pikachu_csrf通关攻略

csrf&#xff08;get&#xff09; 打开pikachu靶场&#xff1a; 1. 根据提示给的账户密码进行登录 2. 打开代理拦截数据包将拦截数据发送到已打开的burp中&#xff1a; 修改数据进行发包&#xff1a; 从上面的url可见&#xff0c;修改用户信息的时候&#xff0c;是不带任何不…

npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED

npm install时报错code CERT_HAS_EXPIRED 一、报错情况二、解决方案 一、报错情况 一直用的好好的&#xff0c;突然今天发现npm install 出问题了&#xff0c;具体报错如下&#xff1a; npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to…

Flink中的时间和窗口(时间语义,水位线,窗口,迟到数据的处理)

目录 Flink中的时间和窗口 1时间语义 1.1Flink中的时间语义 1.1.1处理时间 1.1.2事件时间 1.2那种时间语义更重要 2 水位线 2.1 事件时间和窗口 2.2 什么是水位线 2.3 如何生成水位线 2.3.1使用WatermarkGenerator 2.3.2使用SourceFunction 2.4 水位线的传递 2.5 水位…

【LeetCode每日一题】670. 最大交换

2024-1-22 文章目录 [670. 最大交换](https://leetcode.cn/problems/maximum-swap/)思路&#xff1a; 670. 最大交换 思路&#xff1a; 从后往前遍历整数的字符数组&#xff0c;找到第一个比当前最大值小的数字&#xff0c;然后将该数字与最大值进行交换。 将给定的整数转换为…

PALWORLD linux centos7开服教程

开放端口8211 iptables -A INPUT -p udp -p tcp --dport 8211 -j ACCEPT iptables -A INPUT -p udp -p udp --dport 8211 -j ACCEPT yum -y install glibc.i686 libstdc.i686 screen libcurl.i686 yum install glibc-devel.i686 yum install libstdc-devel.i686 yum -y ins…

若依框架教程

心血来潮&#xff0c;写一篇关于ruoyi【若依】框架从0-1的教程。说一下使用感受吧&#xff0c;如果有一个架构师或者老手已经把架构改造完成也能指导你如何快速上手&#xff0c;那么你在后面的增删改查系列开发起来会如鱼得水。如果没有人改造&#xff0c;也没有人教你&#xf…