L3-2 还原文件 (30 分)

一份重要文件被撕成两半,其中一半还被送进了碎纸机。我们将碎纸机里找到的纸条进行编号,如图 1 所示。然后根据断口的折线形状跟没有切碎的半张纸进行匹配,最后还原成图 2 的样子。要求你输出还原后纸条的正确拼接顺序。

图1 纸条编号

图2 还原结果

输入格式:

输入首先在第一行中给出一个正整数 N(1<N≤105),为没有切碎的半张纸上断口折线角点的个数;随后一行给出从左到右 N 个折线角点的高度值(均为不超过 100 的非负整数)。

随后一行给出一个正整数 M(≤100),为碎纸机里的纸条数量。接下去有 M 行,其中第 i 行给出编号为 i(1≤i≤M)的纸条的断口信息,格式为:

K h[1] h[2] ... h[K]

其中 K 是断口折线角点的个数(不超过 104+1),后面是从左到右 K 个折线角点的高度值。为简单起见,这个“高度”跟没有切碎的半张纸上断口折线角点的高度是一致的。

输出格式:

在一行中输出还原后纸条的正确拼接顺序。纸条编号间以一个空格分隔,行首尾不得有多余空格。

题目数据保证存在唯一解。

输入样例:

17
95 70 80 97 97 68 58 58 80 72 88 81 81 68 68 60 80
6
4 68 58 58 80
3 81 68 68
3 95 70 80
3 68 60 80
5 80 72 88 81 81
4 80 97 97 68

结尾无空行

输出样例:

3 6 1 5 2 4

结尾无空行

#include <bits/stdc++.h>
using namespace std;
int n, m, k, t, flag1, flag2;
int h[100001], vis[101];
vector<int> Ans, frag[101];
void DFS (int p) {if ((int)Ans.size() == m) {flag1 = 1;for (int i = 0; i < m; i++) {if (i) cout << ' ';cout << Ans[i];}}if (flag1) return;for (int i = 1; i <= m; i++) {if (vis[i]) continue;flag2= 0;for (int j = 0; j < (int)frag[i].size(); j++) {if (frag[i][j] != h[p + j]) {flag2 = 1;break;}}if (flag2) continue;Ans.push_back(i);vis[i] = 1;DFS(p + (int)frag[i].size() - 1);vis[i] = 0;Ans.pop_back();}
};
int main() {cin >> n;for (int i = 0; i < n; i++) cin >> h[i];cin >> m;for (int i = 1; i<= m; i++) {cin >> k;for (int j = 0; j < k; j++) {cin >> t;frag[i].push_back(t);}}DFS(0);return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ULL;
const int N=100010,M=110,P=131;
int n,m;
ULL h[N],p[N];
int width[M];
ULL g[M];
bool st[M];
int ans[M];
ULL get(int l,int r){return h[r]-h[l-1]*p[r-l+1];
}bool dfs(int u,int end){if(end==n)return 1;for(int i=1;i<=m;i++)if(!st[i]&&g[i]==get(end,end+width[i]-1)){st[i]=1;ans[u]=i;if(dfs(u+1,end+width[i]-1))return 1;else return 0;}
}
int main(){scanf("%d",&n);p[0]=1;for(int i=1;i<=n;i++){int x;scanf("%d",&x);p[i]=p[i-1]*P;h[i]=h[i-1]*P+x+1;}scanf("%d",&m);for(int i=1;i<=m;i++){scanf("%d",&width[i]);for(int j=0;j<width[i];j++){int x;scanf("%d",&x);g[i]=g[i]*P+x+1;}}dfs(1,1);for(int i=1;i<=m;i++){printf("%d",ans[i]);if(i!=m)printf(" ");}return 0;
}
#include <iostream>
#include <algorithm>
using namespace std;
struct node{string s;int num;int t;
};
bool cmp(node a, node b){return a.t < b.t;
}
bool cmp1(node a, node b){return a.num > b.num;
}
int main(){int n;cin>>n;getchar();string str;getline(cin, str);int m;cin>>m,getchar();node a[m];for(int i=0;i<m;i++){int k;cin>>k,getchar();string t;getline(cin,t),a[i].num=i+1,a[i].s=t;}sort(a,a+m,cmp1);for(int i=0;i<m;i++){int x=str.find(a[i].s);int len=a[i].s.length();a[i].t=x;int num=0;for(int j=x;;j++){if(str[j]==' '){str[j]='*',num++;}if(num==2)break;}}sort(a,a+m,cmp);for(int i=0;i<m;i++){if(i)cout<<" ";cout<<a[i].num;}return 0;
}

L3-2 还原文件 (30 分)相关推荐

  1. L3-029 还原文件 (30 分)-PAT 团体程序设计天梯赛 GPLT

    一份重要文件被撕成两半,其中一半还被送进了碎纸机.我们将碎纸机里找到的纸条进行编号,如图 1 所示.然后根据断口的折线形状跟没有切碎的半张纸进行匹配,最后还原成图 2 的样子.要求你输出还原后纸条的正 ...

  2. 5-46 新浪微博热门话题 (30分)

    5-46 新浪微博热门话题 (30分) 新浪微博可以在发言中嵌入"话题",即将发言中的话题文字写在一对"#"之间,就可以生成话题链接,点击链接可以看到有多少人在 ...

  3. PAT甲级 1151 LCA in a Binary Tree (30分) LCA算法/C++

    1151 LCA in a Binary Tree (30分) 题目大意:给出一棵树的中序和先序遍历,找到这棵树中U和V最小的共同祖先. Tips: 使用一个unordered_map记录中序遍历的值 ...

  4. 8-2 sdust-Java-文件读取与统计【人工判编程题】 (30 分)

    8-2 sdust-Java-文件读取与统计[人工判编程题] (30 分) 在F:\file\有一个纯文本文件article.txt,里面是英文的文章.编写Java程序,读取该文章内容,统计其中的单词 ...

  5. 腾讯QQ2008年笔试题中的附加题(30分)

    //腾讯QQ2008年笔试题中的附加题(30分) //从程序健壮性进行分析,下面的FillUserInfo函数和main函数分别 //存在什么问题?#include <iostream> ...

  6. 集美大学c语言大作业,2019年集美大学硕士研究生考试初试自命题考试大纲C语言程序设计函数程序设计,20%(30分)...

    类似问题答案 2019年集美大学硕士研究生考试初试自命题考试大纲C语言程序设计循环结构程序设计,... (三)循环结构程序设计,10% (15分) 考试内容:for循环.while循环.dowhile ...

  7. tortoisegit 还原文件到某个版本

    在公司Git上想恢复一个月前某天版本的代码.分两步 1.恢复文件 2.import项目到idea 使用tortoisegit 还原文件到某个版本 先在某个文件夹拉代码git clone 切换分支到de ...

  8. 重返天梯-L3-014 周游世界 (30 分)(dfs)

    题目描述 周游世界是件浪漫事,但规划旅行路线就不一定了-- 全世界有成千上万条航线.铁路线.大巴线,令人眼花缭乱.所以旅行社会选择部分运输公司组成联盟,每家公司提供一条线路,然后帮助客户规划由联盟内企 ...

  9. 7-30 目录树 (30 分)

    在ZIP归档文件中,保留着所有压缩文件和目录的相对路径和名称.当使用WinZIP等GUI软件打开ZIP归档文件时,可以从这些信息中重建目录的树状结构.请编写程序实现目录的树状结构的重建工作. 输入格式 ...

最新文章

  1. mybatis 获得一个map的返回集合
  2. 【学术相关】2020年AI领域有哪些让人惊艳的研究?
  3. Ubuntu上sublime配置nodejs运行环境
  4. 请求参数绑定集合类型
  5. 计算机考试没考好的检讨书,考试没考好检讨书4篇
  6. 搜索引擎下拉食云速捷详细_详细解析关键词与搜索引擎之间的霸屏关系
  7. 在Ubuntu 18.04上搭建SonarQube服务
  8. 依赖的包_运维丨python安装mysql的依赖包mysqlpython操作
  9. SQLServer数据库备份与还原
  10. Maxwell 一款简单易上手的实时抓取Mysql数据的软件
  11. 汽车类自媒体怎么找素材?这几个办法很好用
  12. python3爬虫用代理池爬虫搜狗微信文章
  13. 音视频播放器—初始化操作
  14. oracle优化distinct,oracle 索引优化之distinct
  15. 记一个应届生的求职旅途
  16. 小进阶:数据指标体系和数据治理的管理
  17. 怎么隐藏服务器的ip地址
  18. 特征工程系列:数据清洗
  19. tongweb java_home_中标麒麟操作系统下部署 Web项目(Tongweb + DM)
  20. Python实现AES中ECB模式pkcs5padding填充加密/解密(需要加密文档中可以有中文)

热门文章

  1. 狼道:强者的成人礼(第2版)
  2. linux 脚本在哪里编写,Linux 脚本编写基础(一)
  3. pandas的自带数据集_pandas.DataFrame.sample随机抽样
  4. vue中在data中写入img地址 引入问题
  5. 将button变成圆形(有弧度)
  6. poj1958 Strange Towers of Hanoi 题解报告
  7. day05 数据类型
  8. Linux centosVMware df命令、du命令、磁盘分区
  9. [Ogre][地形]OgreTerrain的实现原理分析
  10. PHP 二分查找(详细)