D. Secret Santa(构造)

news2024/11/23 4:04:56

Problem - 1530D - Codeforces

 

每年12月,VK都会为其员工举办名为 "秘密圣诞老人 "的传统活动。它是这样发生的。

从1到n的n名员工参加了这个活动。每个员工i被分配到一个不同的员工bi,员工i必须给这个员工做一份新年礼物。每个员工正好被分配给另外一个员工,没有人被分配给自己(但两个员工可能被分配给对方)。从形式上看,所有bi必须是1到n之间的不同整数,对于任何i,bi≠i必须成立。

该分配通常是随机产生的。今年,作为一个实验,所有活动参与者都被问及他们希望向谁赠送礼物。每个员工i都说他们希望给员工ai送礼。

找到一个有效的分配b,使员工的愿望得到满足的数量最大化。

输入
每个测试包含多个测试案例。第一行包含测试用例的数量t(1≤t≤105)。测试用例的描述如下。

每个测试用例由两行组成。第一行包含一个整数n(2≤n≤2⋅105)--事件参与者的数量。

第二行包含n个整数a1,a2,...,an (1≤ai≤n; ai≠i) --雇员的愿望,从1到n依次排列。

保证所有测试案例的n之和不超过2⋅105。

输出
对于每个测试案例,打印两行。

在第一行,打印一个整数k(0≤k≤n)--在你的任务中实现的愿望的数量。

在第二行,打印n个不同的整数b1,b2,...,bn(1≤bi≤n;bi≠i)--分配给雇员1,2,...,n的雇员数。

k必须等于i的值的数量,使ai=bi,而且必须尽可能大。如果有多个答案,打印任何一个。

例子
输入复制
2
3
2 1 2
7
6 4 6 2 4 5 6
输出拷贝
2
3 1 2
4
6 4 7 2 3 5 1
注意
在第一个测试案例中,存在两个有效的赋值。[3,1,2]和[2,3,1]。前者满足了两个愿望,而后者只满足了一个。因此,k=2,唯一正确的答案是[3,1,2]。

题解:

根据题意,我们尽量让多的人可以送给想要的人

对于没有送礼物的,送给没有收到礼物的人

这样下去可能会有,自己送给自己的情况,我们记录下来,并且找到之前一样想送给相同人的人

交换他们俩,想送的情况,最优情况并不会改变,如上图 

#include<iostream>
#include<algorithm>
#include<string>
#include<queue>
#include<vector>
#include<map>
#include<cstring>
#include<cmath>
using namespace std;
#define int long long
int a[200050];
int b[200050];
int d[200050];
int c[200050];
int e[200050];
void solve()
{
	int n;
	cin >> n;
	for(int i = 1;i <= n;i++)
	{
		c[i] = b[i] = 0;
	}
	for(int i = 1;i <= n;i++)
	{
		cin >> a[i];
		c[a[i]] = 1;
	}
	int s = 0;
	for(int i = 1;i <= n;i++)
	{
		if(c[i])
		s++;
	}
	cout << s<<'\n';
	for(int i = 1;i <= n;i++)
	{
		if(c[a[i]])
		{
			c[a[i]] = 0;
			d[i] = a[i];
			b[a[i]] = 1; 
		}
		else
		{
			d[i] = 0;
		}
	}
	for(int i = 1,j = 1;i <= n;i++)
	{
		if(!d[i])
		{
			while(b[j])
			{
				j++;
			}
			d[i] = j++;
		}
	}
	for(int i = 1;i <= n;i++)
	e[d[i]] = i;
	for(int i = 1;i <= n;i++)
	{
		if(d[i] == i)
		{
			swap(d[i],d[e[a[i]]]);
		}
	}
	for(int i = 1;i <= n;i++)
	cout <<d[i]<<" ";
	cout <<"\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/100702.html

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

相关文章

如何使用Chrome浏览器模拟弱网情况

点击谷歌浏览器图标 打开浏览器后&#xff0c;按下F12键 弹出开发者工具窗口 刷新网页&#xff0c;页面的加载速度为597ms 在开发者工具中&#xff0c;点击Online&#xff0c;在弹出的菜单中点击Slow 3G&#xff08;慢速3G网络&#xff09; 重新加载网站&#xff0c;…

PyTorch logit函数

1.PyTorch vs TensorFlow tensorflow是静态图&#xff0c;需要你把啥都准备好&#xff0c;然后它像个傻子一样执行&#xff0c;tensorflow&#xff0c;目前业界更适合部署&#xff0c;毕竟是静态图&#xff0c;infer的时候速度快。 pytorch&#xff0c;它会在执行的时候&…

Android -- 每日一问:如何检测内存泄露,如何进行内存优化?

经典回答 Android 系统为每一个应用程序都设置了一个硬性的 Dalvik Heap Size 最大限制阈值&#xff0c;这个阈值在不同的设备上会因为 RAM 大小不同而各有差异。如果你的应用占用内存空间已经接近这个阈值&#xff0c;此时再尝试分配内存的话&#xff0c;很容易引起 OOM 。 …

效果分析的关键是指标能算出来……

看到题目会不会有一些奇怪&#xff1f; 这算什么关键…… 经历过才知道&#xff0c;这是一个不起眼但却极为重要的部分&#xff0c;企业在数据驱动发展进程中必然会遇到指标算不出来的情况&#xff0c;而且随着企业规模的不断扩大&#xff0c;这一问题会持续伴随。“指标能算…

[附源码]Python计算机毕业设计Django学习互助辅助系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

外汇天眼:美国12月Markit制造业PMI初值不及预期 市场担忧经济下滑

美国12月企业活动进一步萎缩&#xff0c;因新订单降至两年半以来最低水平&#xff0c;但需求疲软帮助大幅冷却通胀。标普全球(NYSE:SPGI)周五表示&#xff0c;追踪制造业和服务业的美国综合PMI产出指数预览值本月从11月的46.4降至44.6。这是该指数连续第六个月低于私营部门萎缩…

Python学习-9.1 程序界面-main函数的作用

main函数的两种使用功能 情况1&#xff1a;直接执行本py代码文件时&#xff0c;把包含的代码块视为脚本代码顺序执行&#xff1b; 情况2&#xff1a;当本py代码文件作为其他代码import对象时&#xff0c;不执行如下被包含的代码 下面可以通过程序来更好地了解main函数的作用&a…

java-函数式编程浅谈

了解函数式编程的实际应用场景以及优点。 文章目录什么是函数式编程函数式编程的使用原理解析什么是函数式编程 以数学中的函数作为切入点&#xff0c;只关注参数之间的运算满足某种规则&#xff0c;例如zxy。 那么如何体现在编程中呢&#xff0c;熟知的function定义可以作为…

使用dompdf/dompdf实现生成pdf文件

一&#xff1a;dompdf/dompdf地址 github&#xff1a;https://github.com/dompdf/dompdf packagist&#xff1a;http://packagist.p2hp.com/packages/dompdf/dompdf 二&#xff1a;dompdf/dompdf安装 composer require dompdf/dompdf 三&#xff1a;dompdf/dompdf简单实例…

20221218-19英语学习

今日新词&#xff1a; wit n.智力; 头脑; 理解力; 风趣; 风趣的话语; 智者; 才子 alcohol n.酒精, 乙醇, 含酒精饮料 pub n.酒吧, 酒馆 instructor n.教员&#xff1b;教师 granted adv.&#xff08;表示肯定属实&#xff0c;然后再作另一番表述&#xff09;不错&#xff…

左神:高级进阶班4

1.让N个人过河所需最少船​编辑 2.最长回文子序列 3.最少添加字符让字符串变回文串​编辑 4.回文子串的最少切割次数 5.移除字符使字符串变回文串的方案数​编辑 1.让N个人过河所需最少船 思路&#xff1a;1.排序数组&#xff0c;用基数排序&#xff08;元素&#xff08;体…

计算机毕设Python+Vue学生信息管理系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

推特群推营销解读

推特群推王发现&#xff0c;许多品牌使用社交媒体作为提供更好客户支持的一种渠道。使用社交媒体可以实时响应客户的需求。通过电子邮件获取品牌有时可能需要长达48小时。但是&#xff0c;通常在社交媒体上回应的时间要快得多。客户将通过你的品牌发推文&#xff0c;你将在手机…

被动与主动信息收集 | 系统性学习 | 无知的我费曼笔记

文章目录信息收集-被动信息收集介绍收集手段收集内容信息用途信息收集-域名解析过程以手段域名解析过程信息收集 DNS**DNS 信息收集-NSLOOKUP****DNS 信息收集-DIG****查询网站的域名注册信息和备案信息**信息收集-被动信息收集手段大全**使用 Maltego 收集子域名信息**子域名介…

【论文简述】PatchmatchNet: Learned Multi-View Patchmatch Stereo(CVPR 2021)

一、论文简述 1. 第一作者&#xff1a;Fangjinhua Wang 2. 发表年份&#xff1a;2021 3. 发表期刊&#xff1a;CVPR 4. 关键词&#xff1a;MVS、深度学习、Patchmatch、自适应、迭代优化 5. 探索动机&#xff1a;可扩展性、时间、内存占用等效率问题依然没有解决。 While…

【电气安全】关于医疗专用隔离电源系统在医院配电系统中的应用

【摘要】 根据医疗场所分类说明医院尤其是 2 类 医疗场所的接地方案&#xff0c;分析医疗场所自动切断电源措 施&#xff0c;提出校验医疗 IT 系统配出回路长度&#xff1b;说明 RCD、RCM、IMD、IFLS 等的用途和范围&#xff1b;就应急医 院 2 类场所的配电方案进行探讨。 【…

JavaScript刷LeetCode拿offer-双指针技巧(上)

一、前言 一般情况下&#xff0c;遍历数组&#xff08;或者字符串&#xff09;操作&#xff0c;都是采用单指针从前往后或者从后往前依次访问数组&#xff08;或者字符串&#xff09;中的元素。 而对于以下情况&#xff0c;只采用单指针处理&#xff0c;则会徒增时间复杂度和…

统计学习方法 | 概论

一.简介 统计学习是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科 1.统计学习方法的步骤 ①得到一个有限的训练数据集合 ②确定学习模型的集合&#xff08;模型&#xff09; ③确定模型选择的准则&#xff08;策略&#xff09; ④实现求解…

Python的安装与配置(图文教程)

安装Python 想要进行Python开发&#xff0c;首先需要下载和配置Python解释器。 下载Python 访问Python官网: https://www.python.org/点击downloads按钮&#xff0c;在下拉框中选择系统类型(windows/Mac OS/Linux等)选择下载最新版本的Python安装Python 双击下载好的Python…

五款几乎没人知道的小众软件,按需下载

分享是一种神奇的东西&#xff0c;它使快乐增大&#xff0c;它使悲伤减小&#xff0c;坚持分享一些好用的软件给大家。 1.开源分享工具——ShareX ShareX 是一款 Windows 上开源的截图、文件共享和生产力工具&#xff0c;它是一款功能非常强大的分享工具&#xff0c;只要是免…