2021秋季《数据结构》_EOJ 1059. 恢复古诗
题目
jxtxzzw和好朋友去探险,在山洞里jxtxzzw发现了许多古诗,他很兴奋地呼唤同伴过来,用相机把这些古诗拍下来。每个人都选了一部分进行拍照。
回到学校以后,所有人把相机中的照片导出,保存在电脑。
这时jxtxzzw发现,竟然当时没有让伙伴们按照顺序拍照。
现在这些照片根本就不是有序的,所以这些古代诗歌的碎片完全连不成一个整体。
好在现在有一个线索,在相邻的两张照片中,一定有一句是重复的。分别出现在两张碎片的头和尾。
例如上图是完整的原文,被拍成了 2 张照片,两张照片各保存了 4 行,如下图。
思路
方法1
用了两个map和两个数组,
map<string, int> headMap; // headMap[head]=i:第i张照片的第一行为head
map<string, int> tailMap;
string headArr[1001]; // headArr[i]=head:第i张照片的第一行为head
string tailArr[1001];
查找的时候颠来倒去一下就行。感觉这样的思路还是有些绕的,待改进。
代码
#include<bits/stdc++.h>
using namespace std;map<string, int> headMap; // headMap[head]=i:第i张照片的第一行为head
map<string, int> tailMap;
string headArr[1001]; // headArr[i]=head:第i张照片的第一行为head
string tailArr[1001];
vector<string> v;
int seq[1001] = {0}; // 正确的照片顺序int main()
{for(int i=0;i<1001;i++){headArr[i]="no";tailArr[i]="no";}int p, l; cin>>p>>l;for(int i = 0; i <= p*l; i++){string str;getline(cin,str);v.push_back(str);}for(int i = 0; i < p; i++){string head = v[i*l+1];string tail = v[(i+1)*l];// cout<<head<<' '<<tail<<endl;headMap[head] = i;tailMap[tail] = i;headArr[i] = head;tailArr[i] = tail;}// /***************************************/
// cout<<"************"<<endl;
// for(int i = 0; i < p; i++)
// {// cout<<headArr[i]<<endl;
// }
// cout<<"************"<<endl;
// for(int i = 0; i < p; i++)
// {// cout<<tailArr[i]<<endl;
// }
// cout<<"************"<<endl;
// /***************************************/int idx = 0;int flag = 0; // 是否已经找到第一张照片string nowHead;while (idx<p){// 找第一张照片if(!flag){for(map<string, int>::iterator it = headMap.begin(); it!=headMap.end(); it++){nowHead = it->first;if(tailMap.count(nowHead)==0)// 该head不是任何照片的tail,即该照片为剩余照片中的第一张{flag = 1;seq[idx] = it->second;idx++;break;}}}// cout<<nowHead<<endl;int headIdx = headMap[nowHead]; // 这张照片的序号string nowTail = tailArr[headIdx]; // 这张照片的最后一行int nextIdx = headMap[nowTail]; // 最后一行作为首行的照片序号,即下一张照片seq[idx] = nextIdx;idx++;nowHead = headArr[nextIdx];}int j = 0;for(int i = 0; i < p; i++){// int idx = seq[i];// cout<<'*'<<idx<<endl;for(j = l*seq[i]+1; j < (seq[i]+1)*l; j++)cout<<v[j]<<endl;}cout<<v[j]<<endl;system("pause");return 0;
}
2021秋季《数据结构》_EOJ 1059. 恢复古诗相关推荐
- 某大学2021秋季学期Java期末考试范围概述
某大学2021秋季学期Java期末考试范围概述 Scope of inspection Not test Edition Scope of inspection 第四章 类与对象(三大特征必须掌握,以 ...
- 李沐分享斯坦福2021秋季新课:实用机器学习
点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:新智元 AI博士笔记系列推荐 周志华<机器学习>手推笔记正式开源!可打印版本附pdf下载链接 李沐 ...
- 美国计算机研究生留学签证时间,美国大学研究生录取结果,美国研究生院录取时间和流程一览!附2021秋季截止日期...
对于去美国留学申请读书的同学们而言,美国名校往往更受青睐和欢迎.美国大学研究生录取结果,美国留学申请,美国名校可以给你带来什么,下面就跟着小编详细了解下,什么网站可以查询美国大学研究生往年录取信息?谢 ...
- 更新第十三讲 2021秋季班学而思培优 二年级三年级四年级五年级数学
[同步更新第13讲]2021秋季班学而思培优 小学二年级勤思数学 何俞霖 小学三年级勤思数学 王睿 小学四年级勤思数学 王睿 小学五年级勤思数学 刘震宇
- 微软 2021 秋季发布会汇总
微软在 2021 秋季发布会上发布了 8 款设备. 以下是汇总: Surface Pro 8: 边框最窄的 Surface Pro 系列,屏幕由 12.3 英寸增加到 13 英寸,120Hz 高刷新率 ...
- 美国计算机硕士申请截止,美国大学研究生录取通知时间,美国研究生院录取时间和流程一览!附2021秋季截止日期...
对于去美国留学申请读书的同学们而言,美国名校往往更受青睐和欢迎.美国大学研究生录取通知时间,美国留学申请,美国名校可以给你带来什么,下面就跟着小编详细了解下,普渡大学收到录取通知书的时间?,盘点美国研 ...
- 三次蝉联!Stratifyd在G2 2021秋季报告中再获“高成长者”荣誉
点击上方蓝字关注我们 High Performer 近日,全球领先的商业软件评测机构G2公布了2021秋季Grid报告,Stratifyd凭借杰出的客户满意度和市场表现上榜G2文本分析软件类别的& ...
- 南开大学 软件学院 计算机网络 2021秋季 复习
南开大学 软件学院 计算机网络 2021秋季 复习 这是本人根据张圣林老师本学期给的复习ppt总结的,仅供参考 第一章 引言 为什么要选择五层分层 1. 网络协议以及协议目的 为进行网络中的数据交换而 ...
- 诺瓦科技2021秋季校园招聘——渤海大学交流群建立啦
诺瓦科技2021秋季校园招聘 诺瓦科技2021秋季校园招聘--渤海大学交流群建立啦 我是西安诺瓦科技校园招聘2021渤海大学校园大使.我公司是西安市优秀企业,成立于2008年,核心成员来自西安电子科技 ...
最新文章
- 数据结构-线性表的顺序结构
- BizTalk 开发小技巧-Custom XSLT复杂mapping的简单实现
- 服务器系统摁c,如何系统有效学习c服务器开发
- rsyslog日志管理+LogAnalyzer
- 五万块钱买什么车好_10万预算买什么车好?看空间、动力和配置
- angular 接入 IdentityServer4
- 【图论】【模板】静态仙人掌(luogu 5236)
- 自定义组件--创建mxml组件
- 用samba来创建windows下的文件共享
- 阿里研发效能数据知多少
- OpenCV精进之路(十三):角点检测
- RFC 6528 翻译
- foobar2000 for mac(多功能音频播放器)
- linux挂载40t硬盘,Centos支持40T磁盘阵列MD1200
- word中行与行间距大
- ChemDraw 2D与ChemBio 3D之间的信息转换
- 小旋风asp服务器出错
- Excel里面方框打勾
- 猪八戒网冲刺港交所上市:2021年GMV达84亿元,朱明跃持股28%
- PL3368C-ASEMI低功耗电源IC选PL3368C