洛谷 P3034 Cow Photography G/S——题解

news/2024/12/24 20:23:39/文章来源:https://www.cnblogs.com/qc0817/p/18401398

洛谷P3034题解


传送锚点


摸鱼环节

[USACO11DEC] Cow Photography G/S

题面翻译

题目描述

今天的奶牛们特别调皮!Farmer John 想做的只是给排成一排的奶牛拍照,但是在他拍下照片之前,奶牛们一直在移动。

具体地说,FJ 有 \(N\) 头奶牛(\(1 \leq N \leq 20\,000\)),每头奶牛都有一个唯一确定的编号。FJ 想要以一个特定的顺序拍下一张奶牛排成一排的照片,这个顺序用数组 \(A[1 \ldots N]\) 表示,其中 \(A[i]\) 代表排在 \(i\) 位置的奶牛的编号。

他按照这样的顺序将奶牛们排列好,但在他按下快门之前,有些奶牛(可能是零头或任意多头奶牛,位置也不一定连续)将移到一个新的位置。更准确地说,一些奶牛离开队列,剩下的奶牛靠拢,这些离开的奶牛再将自己重新插入到队列中的任意位置(不一定是他们之前的位置)。FJ 感到非常沮丧,他再次按照 \(A\) 数组的顺序重新安排了队列。但在他再次按下快门之前,又有一些奶牛移动到了新的位置。

就这样,FJ 拍了五张照片。给出每张照片拍摄的内容(即 FJ 按下快门时奶牛的顺序),请你尝试推算出 FJ 最初为奶牛们排的顺序(即 \(A\) 数组)。由于可能有奶牛移动,照片显示的顺序与原来的顺序可能有所不同。但是,一头奶牛最多只会移动一次:即如果一头奶牛在拍其中一张照片时移动了,它在拍其他四张照片的时候都不会移动。当然,由于其他奶牛也在移动,它在不同照片中的顺序并不一定相同。

输入格式

第一行包含一个整数 \(N\)

接下来 \(5N\) 行,每 \(N\) 行描述了一张照片中各奶牛的顺序。每行包含一个奶牛的编号,保证所有编号都是不超过 \(1\,000\,000\,000\) 的非负整数。

输出格式

输出 \(N\) 行,每行一个整数 \(A[i]\),即 FJ 最初为奶牛排好的顺序。

样例解释

FJ 拍的五张照片分别为:

  • 10 20 30 40 50
  • 20 10 30 40 50
  • 30 10 20 40 50
  • 40 10 20 30 50
  • 50 10 20 30 40

题目描述

The cows are in a particularly mischievous mood today! All Farmer John wants to do is take a photograph of the cows standing in a line, but they keep moving right before he has a chance to snap the picture.

Specifically, each of FJ's N (1 <= N <= 20,000) cows has a unique integer ID number. FJ wants to take a picture of the cows standing in a line in a very specific ordering, represented by the contents of an array A[1...N], where A[j] gives the ID number of the jth cow in the ordering. He arranges the cows in this order, but just before he can press the button on his camera to snap the picture, a group of zero or more cows (not necessarily a contiguous group) moves to a set of new positions in the lineup. More precisely, a group of zero or more cows steps away from the line, with the remaining cows shifting over to close the resulting gaps in the lineup. The cows who stepped away then re-insert themselves at different positions in the lineup (not necessarily at the locations they originally occupied). Frustrated but not deterred, FJ again arranges his cows according to the ordering in A, but again, right before he can snap a picture, a different group of zero or more cows moves to a set of new positions in the lineup.

The process above repeats for a total of five photographs before FJ gives up. Given the contents of each photograph, see if you can reconstruct the original intended ordering A. Each photograph shows an ordering of the cows that differs from A in that some group of zero or more cows has moved. However, a cow only moves in at most one photograph: if a cow is part of the group that moves in one photograph, she will not actively move in any of the other four photographs (although she could end up at a different index as a consequence of other cows around her moving, of course).

Farmer John居然拍了五张照片,每张表示初始化牛位置的移动后的状态。然后求出FJ这五头牛初始化的样子。

输入格式

* Line 1: The number of cows, N (1 <= N <= 20,000).

* Lines 2..5N+1: The next 5N lines describe five orderings, each one a block of N contiguous lines. Each line contains the ID of a cow, an integer in the range 0...1,000,000,000.

输出格式

* Lines 1..N: The intended ordering A, one ID per line.

样例 #1

样例输入 #1

5 
10 
20 
30 
40 
50 
20 
10 
30 
40 
50 
30 
10 
20 
40 
50 
40 
10 
20 
30 
50 
50 
10 
20 
30 
40

样例输出 #1

10 
20 
30 
40 
50

提示

There are 5 cows, with IDs 10, 20, 30, 40, and 50. In each of the 5 photos, a different cow moves to the front of the line (at most one cow moves in each photo here, but it is possible in other inputs that multiple cows could move in a particular photo).

The correct original ordering A[1..5] is 10, 20, 30, 40, 50.


又是经典的题面,john与cow的爱情故事john与cow的oi故事,也不知道为啥要给奶牛拍照,咱也不敢问,问了john发力给黑题就完了。于是为了祭拜膜拜john这位oi鼻祖,咱就来写个蓝题。


正片开始

1.草率代码

仔细分析样例可以知道,对于5张照片,只要有奶牛\(A\)在奶牛\(B\)之前出现三次,则奶牛\(A\)一定在奶牛\(B\)之前。由于\(奶牛编号\leq 1000000000\),所以需要用map搞一下。很简单就能得到以下代码。

code:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=5e6+1;
int n,a[N];
map<int,ll>m[10];//照片编号,奶牛编号——>位置编号
int cmp(int x,int y)
{int ans=0;//统计次数for(int i=1;i<=5;i++)//遍历每张照片中x,y的大小关系。if(m[i][x]<m[i][y]) ans++;return ans>=3;
}
int main()
{cin>>n;for(int i=1;i<=5;i++){for(int j=1;j<=n;j++){int x;cin>>x;a[j]=x;//每张照片中的元素不变,直接覆盖即可m[i][x]=j;//用map映射关系}}sort(a+1,a+n+1,cmp);for(int i=1;i<=n;i++) cout<<a[i]<<endl;return 0;
}

2.懵逼部分

  1. 浅浅分析下复杂度,排序自带\(5 \cdot nlogn\),基于map内用红黑树实现,每次查询\(logn\),总复杂就是\(5\cdot nlogn \cdot2\cdot logn=10 \cdot n\cdot (logn)^{2}\),将小\(n=20000\)带入浅算一下,诶嘛直接炸了(但不知道为啥我居然没祭,难不成是数据太水了是我RP值太高了?)。优化算法,很明显用哈希,这里可以用unordered_map,内部基于哈希实现,体验\(o(1)\)查询的快感。
  2. 实测了一下,最后一个大数据,用原始版map跑了\(334ms\),用上unordered_map的话只需要\(94ms\),大大提升了代码的B格容错率。

完整代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=5e6+1;
int n,a[N];
unordered_map<int,ll>m[10];//照片编号,奶牛编号——>位置编号
int cmp(int x,int y)
{int ans=0;for(int i=1;i<=5;i++)if(m[i][x]<m[i][y]) ans++;return ans>=3;
}
int main()
{cin>>n;for(int i=1;i<=5;i++){for(int j=1;j<=n;j++){int x;cin>>x;a[j]=x;m[i][x]=j;}}sort(a+1,a+n+1,cmp);for(int i=1;i<=n;i++) cout<<a[i]<<endl;return 0;
}

完结收工!!!!!

个人主页

看完点赞,养成习惯

\(\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\)

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

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

相关文章

记一次.net使用httpclient中代码中使用response.EnsureSuccessStatusCode()引发的误会

1.问题背景 有一个拉取第三方数据存储到本地的需求,使用.net开发,使用httpClient发送post请求。第三方接口里面会校验我们发送的json数据,如果我们的数据格式不正确会抛出异常。 2.返回的结果不同? 第一步,我用postman做了测试,对方的接口可以调用,正确和错误都可以返回…

等保安全设备配置

这篇文章带你了解等保2.0 二级和三级安全设备配置!本文介绍了不同等级的等保规划设计,包括二级等保(基础版)、三级等保(基础版、增强版、豪华版)。其中,各版本均需配备主机杀毒软件和日志审计系统等,增强版和豪华版还需增加 IPS、Anti-DDoS 等。此外,文章还提到内网安…

触想全新Z系列工控机扩展IIoT应用潜能

8月31日,触想重磅推出全新Z系列高性能、扩展型工控机——TPC05/06/07-WIPC,提供标准版/双卡槽/四卡槽3款机型选择。作为边缘计算、机器视觉、AI智能和工业应用的理想机型,Z系列工控机支持Intel第12/13/14代Core™ i3/i5/i7/i9处理器,最多搭载4个PCIe/PCI的扩展能力,可外接…

K8S怎么删除一个Node节点

驱逐Pod 本次node为172.16.5.103# kubectl drain 172.16.5.103 --force --ignore-daemonsets查看该节点无法调度删除node# kubectl delete node 172.16.5.103

Base2024

Aura 酱的礼物 ssrf data伪协议 格式 data://text/plain,xxx能读取出内容 data://text/plain;base64,xxxxxx,xxxxxx先base64解码 再读取出内容 @隔断 当要求url开头时,使用@来分隔 file=http://baidu.com@127.0.0.1源码 <?php highlight_file(__FILE__); // Aura 酱,欢迎…

短视频程序源码,文件上传漏洞及防御方法

短视频程序源码,文件上传漏洞及防御方法一、文件上传漏洞原理在短视频程序源码的文件上传的功能处,若服务端脚本语言未对上传的文件进行严格验证和过滤,导致恶意用户上传恶意的脚本文件时,就有可能获取执行服务端命令的能力,这就是文件上传漏洞。二、文件上传漏洞触发点相…

Windows11安装Jenkins

Windows11安装Jenkins 1. 下载安装JDK11 从2022年 6 月 28 日发布的 Jenkins 2.357 和2022年9 月发布的 LTS 版本开始,Jenkins 需要 Java 11 才能使用,放弃 Java 8,如果用JDK1.8,那么Jenkins版本需要是2.357版本之前。 JDK11下载渠道oracle官网:https://www.oracle.com/ja…

PART1-Oracle关系数据结构-数据字典与动态性能视图

6. 数据字典与动态性能视图 6.1. 数据字典概述 Oracle数据库的一个重要组成部分是其数据字典,这是一个只读的表集合,提供了有关数据库的管理元数据。数据字典包含如下信息:数据库中每个模式对象的定义,包括列的默认值和完整性约束信息 分配给模式对象的空间量以及当前使用的…

最让程序员破防的12句话,你来补充下一句。

1、这个应该很简单吧,要那么久? 2、之前有一个类似的功能,拿过来改一下就好了。 3、产品说这个功能,已经给客户沟通好了,你想办法看怎么实现。 4、这个需求真的是最终版了。 5、要不我们还是使用上一版设计? 6、先做出来看看,不合适再改。 7、我就要这种效果,怎么实现是…

Delphi怎样安装和配置第三方控件并处理找不到文件

一、提示信息:[dcc64 Error] E1026 File not found: ‘***.res’ 二、解决方法: 1、正解:应当去看官方的安装说明文档,比如若你用自动或手动方式安装和部署TMS FlexCel Studio for VCL and FireMonkey *.*.*.*.exe时,你应当仔细阅读官方的安装说明:http://www.tmssoftwar…

五子棋AI:实现逻辑与相关背景探讨(上)

绪论本合集将详细讲述如何实现基于群只能遗传算法的五子棋AI,采用C++作为底层编程语言 本篇将简要讨论实现思路,并在后续的文中逐一展开了解五子棋 五子棋规则五子棋是一种经典的棋类游戏,规则简单却充满策略性。游戏在一个1919的棋盘上进行(也可以使用1313或1515的棋盘)。…

常用delphi IDE环境配置

目录 常用delphi XE IDE环境配置,大家都需要熟练 一、android SDK : 二、环境变量 User System Overrides :覆盖用户操作系统的全局配置参数:System Variables 操作系统层面的全局变量: 其中:重要的,和自己个性化的: 三、自己的类库路径 四、测试工程默认路径 五、…