ABC 391

news/2025/2/22 5:51:09

目录

        C. Make it Simple 

        D. Swap to Gather 

        E. GCD of Subset


 

 

 

C. Make it Simple 

 

        看当前输入的两个点作为一对是否被标记过,用 set 判重就可以了 

 

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 5, INF = 1e18;

int T, n, m, cnt, ans;
string s;
set<pair<int, int> > se;

signed main()
{
	cin >> n >> m;
	for (int i = 1; i <= m; i ++)
	{
		int u, v;
		cin >> u >> v;
		if (u == v || se.find({u, v}) != se.end() || se.find({v, u}) != se.end())
		{
			ans ++;
			continue;
		}
		se.insert({u, v});
		se.insert({v, u});        // 两个都要加
	}
	cout << ans;
	return 0;
}

 

 

 

 

 

D. Swap to Gather 

         

         移动 0。对于每一个 0,要么移到其左侧所有 1 的左边,要么移到其右侧所有 1 的右边,选哪种看哪边 1 的个数少。正反两次前缀和。

        

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 5e5 + 5, INF = 1e18;

int T, n, cnt, ans, a[N], b[N];
string s;

signed main()
{
	cin >> n >> s;
	for (int i = 0; i < n; i ++)
		if (s[i] == '1')
			a[i] = a[i - 1] + 1;
		else
			a[i] = a[i - 1];
	for (int i = n - 1; i >= 0; i --)
		if (s[i] == '1')
			b[i] = b[i + 1] + 1;
		else
			b[i] = b[i + 1];
	for (int i = 0; i < n; i ++)
		if (s[i] == '0')
			ans += min(a[i], b[i]);
	cout << ans;
	return 0;
}

 

 

 

 

 

E. GCD of Subset

        把找最大公因数的问题转化成从 1 开始枚举所有公因数看是否合法。

        对于一个公因数 x,若序列 A 中至少有 k 个数是 x 的倍数时,x 合法。

        目标:统计公因数 x,序列 A 中有多少个数是 x 的倍数

        步骤:(1)统计序列 A 中每个数出现的个数

                   (2)枚举 x,mult [ x ] = cnt [ x ] + cnt [ 2x ] + cnt [ 3x ] + ...

                   (3)再次枚举 x,只要 mult [ x ] 大于题中给定的 k,x 就可以成为序列 A 中是 x 的整数倍的数的答案

 

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1200005, maxa = 1e6 + 5, INF = 1e18;

int T, n, k, a[N], ans[maxa], cnt[maxa], mult[maxa];
string s;

signed main()
{
	cin >> n >> k;
	for (int i = 1; i <= n; i ++)
	{
		cin >> a[i];
		cnt[a[i]] ++;
	}
	for (int i = 1; i <= maxa; i ++)
		for (int j = i; j <= maxa; j += i)
			mult[i] += cnt[j];
	for (int i = 1; i <= maxa; i ++)
		if (mult[i] >= k)
			for (int j = i; j <= maxa; j += i)
					ans[j] = max(ans[j], i);
	for (int i = 1; i <= n; i ++)
		cout << ans[a[i]] << '\n';	
	return 0;
}

http://www.niftyadmin.cn/n/5861692.html

相关文章

人工智能任务23-天文领域的超亮超新星能源机制结合深度神经网络的研究方向

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能任务23-天文领域的超亮超新星能源机制结合深度神经网络的研究方向。 文章目录 一、研究背景阐述超亮超新星的定义与发现历程超亮超新星能源机制的主要理论模型1. 56Ni衰变模型2. 超新星抛射物与致密星周介…

游戏引擎学习第115天

仓库:https://gitee.com/mrxiao_com/2d_game_3 打开程序&#xff0c;查看我们在性能方面的进展 这段内容主要介绍了优化代码以利用处理器中的SIMD&#xff08;单指令多数据&#xff09;向量单元的基本概念。具体流程如下&#xff1a; 讲解了SIMD的基本原理&#xff0c;如何通…

Flask flash() 消息示例

目录 安装 Flask 入门:Flask flash() 基本示例 进阶:使用 Flask-WTF Flash 登录结果消息 详解:get_flashed_messages() 详解:flash() 消息的完整生命周期 Flask 提供 flash() 用于向 用户传递临时消息,通常用于: • 表单提交成功或失败 • 用户登录、注册、退出提…

什么是 Vue 的自定义事件?如何触发和监听?

Vue 的自定义事件详解 什么是自定义事件&#xff1f; 在 Vue 中&#xff0c;自定义事件是组件之间通信的重要机制。自定义事件允许子组件向父组件发送消息&#xff0c;通常用于处理用户交互或异步操作的结果。这种机制使得组件间的通信更加灵活和解耦。 自定义事件的基本概念…

2025年股指期货和股指期权合约交割的通知!

锦鲤三三每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 2025年股指期货和股指期权合约交割的通知&#xff01; 根据中国金融期货交易所规则及相关规定&#xff0c;以下股指期货和股指期权合约于指定日期进行交割&#xff0c;现将各合…

网络安全-php安全知识点

写给和我一样没学过php的安全小白&#xff0c;只是为了让你看懂php代码&#xff0c;专门学后端的请出门左转。学安全需要学的东西太多&#xff0c;你不可能把js学的和做前端的同学一样好、把php学的和做后端的一样好&#xff0c;把数据库学的和做数据库优化的同学一样好&#x…

git上传 项目 把node_modules也上传至仓库了,在文件.gitignore 中忽略node_modules 依然不行

前言 新建了一个vitepress 项目 但上传至github的时候不小心把node_modules 上传到仓库中了&#xff0c;于是我重新添加了 .gitignore 然后重新上传项目&#xff0c; 上次成功后却发现 node_modules 在仓库中依然存在 思考 这种情况可能是因为 Git 会继续跟踪已经被提交的文…

数据库简史 |DBA的智能时代,从DeepSeek到DeepThink

在过去&#xff0c;我们以一百种方式思考&#xff1a;智能时代会如何改变DBA的工作。而现在&#xff0c;有一万种智能尝试正在切实和加速的改变DBA的工作。 开源的DeepSeek正在以光速改变大家对于人工智能的认知&#xff0c;几乎所有企业可以通过DeepSeek的慷慨开源来构建企业自…