传送门:

  [1]:HDU

  [2]:bestcoder

B.度度熊与排列(思维)

•题意

  有一个数组 p,p 中包含的数为 1~m 的全排列,一个含 m 个字符的串 s;

  在 s 上有一个操作,对于 s 中的第 i 个位置的字符,放到 p[ i ] 位置,构成一个新串 t;

  即 si=tpisi=tpi;

  给你 2n 个串,每两个串为一组,前一个串表示原串 s,后一个串表示经过 p 映射后的新串 t;

  求是否存在某个 1~m 的全排列,使得这 n 组串都可以经过 p 由 s 变为 t;

  如果存在,输出字典序最小的那组,如果不存在,输出 -1;

•思路

就s->t可以对应实现而言

每个s串的每个位置的字母,与每个t串的对应位置的字母是相同的

例如

s串     t串

abcdda  addcba

azxcvv   vvcxza

s串每个位置字母

       1    2  3  4  5  6  

     a  b  c  d  d  a

     a  z  x   c  v  v

t串每个位置字母

       1    2  3  4  5  6  

     a  d  d  c  b  a

     v  v  c   x  z  a

所以s与t位置对应

1->6,2->5,3->4,4->3,5->2,6->1

为了方便查找,我们可以将s串每一列按字典序排序,t串每一列按字典序排序

于是变成

s串

       1    6  2  3  4  5  

     a  a  b  c  d  d

     a  v  z   x  c  v

t串

       6    1  5  4  3  2  

     a  a  b  c  d  d

     a  v  z   x  c  v

排序之后s的每一列,与t的每一列应该是完全相同的,

s与t所对应的序号,就是对应的位置

•代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3
 4 pair<string,int> p1[55],p2[55];
 5 string s[25],t[25];
 6
 7 int main()
 8 {
 9     int T;
10     cin>>T;
11     while(T--)
12     {
13         int n,m;
14         cin>>n>>m;
15         for(int i=1;i<=n;i++)
16             cin>>s[i]>>t[i];
17
18         for(int j=0;j<m;j++)
19         {
20             string x,y;
21             for(int i=1;i<=n;i++)
22             {
23                 x+=s[i][j];
24                 y+=t[i][j];
25             }
26             p1[j].first=x,p2[j].first=y;
27             p1[j].second=j+1,p2[j].second=j+1;
28         }
29         sort(p1,p1+m);
30         sort(p2,p2+m);
31
32         int index[55];
33         bool flag=true;
34         for(int i=0;i<m;i++)
35         {
36             if(p1[i].first!=p2[i].first)
37             {
38                 puts("-1");
39                 flag=false;
40                 break;
41             }
42             index[p1[i].second]=p2[i].second;
43         }
44         if(!flag)
45             continue;
46         for(int i=1;i<=m;i++)
47         {
48             if(i!=1)
49                 printf(" %d",index[i]);
50             else
51                 printf("%d",index[i]);
52         }
53         puts("");
54     }
55 }

View Code

转载于:https://www.cnblogs.com/MMMinoz/p/11379607.html

2019 年百度之星·程序设计大赛 - 初赛二相关推荐

  1. 2019 年百度之星·程序设计大赛 - 初赛一 C. HDU 6670 Mindis 离散化+dijkstra

    题目链接 :http://acm.hdu.edu.cn/showproblem.php?pid=6670 Mindis Time Limit: 4000/2000 MS (Java/Others) M ...

  2. 2019 年百度之星·程序设计大赛 - 初赛一Game HDU 6669 (实现,贪心)

    Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...

  3. 2019 年百度之星·程序设计大赛 - 初赛一 1003 Mindis

    Mindis Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total S ...

  4. [2019 年百度之星·程序设计大赛 - 初赛三]简要题解?

    UPD:AC代码放上去了 前言 老年贤者选手终于记得打百度之星了 Orz mayaohua2003 题目链接 最短路 1 n⊕1n \oplus 1n⊕1 Code #include <cstd ...

  5. 2019 年百度之星·程序设计大赛 - 初赛一

    传送门 [1]hdu [2]bestcoder B.Game(贪心+思维) •题意 一步可以走一个或者两个,求依次进入n个区间[li,ri]的最少步数 •思路 就当前位置cur来说, 1)如果下一个任 ...

  6. 2019 年百度之星·程序设计大赛 - 初赛一 解题报告

    题目链接 1001 Polynomial (基础数学) Accepts: 2234 Submissions: 5283 Time Limit: 2000/1000 MS (Java/Others) M ...

  7. 2021 年百度之星·程序设计大赛 - 初赛二 1001 签到(找规律,快速幂)

    solution 找规律 #include <iostream> #include <algorithm>using namespace std;const int mod = ...

  8. 2021 年百度之星·程序设计大赛 - 初赛二 1003 魔怔(并查集,联通性,欧拉回路)

    problem solution 发现除了起点和终点,剩下所有点周围的边都会被恰经过偶数次,所以这些点初始连向了偶数条白边. 考虑由白边连接形成的图,每个连通块中度数为奇数的点一定为偶数个. 所以起点 ...

  9. 2021 年百度之星·程序设计大赛 - 初赛二 1005 水题(贪心结论)

    problem solution 开始还以为是CF987E,但是奇偶性并不一样,,结果是个贪心乱搞..样例都没过交了能过,醉了. #include<bits/stdc++.h> using ...

最新文章

  1. jQuery实现用户注册的表单验证
  2. Android之Animation动画的介绍及用法
  3. 阅读副本和Spring Data第2部分:配置基础项目
  4. java面试题4 牛客:运行下列代码,运行结果为
  5. DOS命令之ping命令大全详解
  6. 没有信号无服务器,没有信号不用怕“音离”你身边的便携式基站
  7. Python3.2官方文件翻译-工具列表和十进制浮点计算
  8. 【Flask】ORM 关系一对一
  9. javax.comm的API
  10. [HNOI2008]越狱
  11. 从零基础入门Tensorflow2.0 ----五、24TF1.0dataset使用
  12. 团队作业7——第二次项目冲刺(Beta版本)-第一篇
  13. 《凤凰架构》读书笔记
  14. 微软重新评估收购雅虎提议
  15. 汉信码生成和识别SDK
  16. 查看各类系统端口占用情况
  17. Linux/Windows快速镜像安装包下载
  18. 以太坊开发入门,完整入门篇(小白可以看看,高手看看自己有没有遗漏的
  19. tomcat重启警告:Abandoned connection cleanup thread 服务器宕机解决方案
  20. 开源前端脚本错误监控及跟踪解决项目BadJS试用

热门文章

  1. MySQL分页查询慢的方案解决
  2. 磁盘分区格式FAT32与NTFS
  3. java vnc_linux下配置vnc的方法
  4. springmvc执行流程(简述易懂)
  5. 火狐浏览器服务器意外响应,Firefox 火狐浏览器 83 发布,已修复任意代码执行漏洞...
  6. android xe 调用 java,Delphi XE6 for Android 让手机震动(调用Java的函数)
  7. mysql使用索引扫描做排序_「Mysql索引原理(八)」使用索引扫描做排序
  8. linux path在哪个文件夹,linux PATH环境变量全解析
  9. 三次握手和四次挥手图解_图解TCP三次握手和四次挥手
  10. stm32f7linux,STM32F7串口5初始化失败