UVAL - 6755 - Swyper Keyboard

先上题目:

https://icpcarchive.ecs.baylor.edu/external/67/6755.pdf

题目复制起来比较麻烦。

 

  题意:定义一种操作:给出一个字符串,然后手指就按照给出的字符串的字符出现顺序不离开触摸屏那样移动,这样最后就会得到一个字符串(不一定等于给出的字符串),现在再给你一堆字符串,问你这些字符串根据给你的顺序,最先出现的是哪一个字符串是得到的那个字符串的子序列。如果没有出现的话就输出"NO SOLUTION"。

  做法:先求出那个字符串,然后再逐个逐个字符串找。关于怎样求这个字符串,说起来好像有点复杂,大概的做法就是在判断划过某两个字符的过程中会有哪些字符的时候,先缩小枚举的范围,然后对于范围里面的每一个字符都进行一次判断,判断的方法是使用叉积来判断,如果这个判断的字符的四个角不都在原来的那两个字符连成的线段的一侧的话说明就是穿过的(注意刚好在线上的情况)。具体实现看代码。

 

上代码:

 

  1 #include <cstdio>
  2 #include <cstring>
  3 #include <cmath>
  4 #include <algorithm>
  5 #include <iostream>
  6 #include <string>
  7 #define APH 26
  8 #define MAX 1002
  9 using namespace std;
 10 
 11 
 12 typedef struct Point{
 13     int x,y;
 14 
 15     Point(int x=0,int y=0):x(x),y(y){}
 16 
 17 }Point;
 18 typedef Point Vector;
 19 Vector operator + (Point A,Point B){ return Vector(B.x+A.x,B.y+A.y);}
 20 Vector operator - (Point A,Point B){ return Vector(B.x-A.x,B.y-A.y);}
 21 Vector operator * (Point A,int e){ return Point(A.x*e,A.y*e);}
 22 Vector operator / (Point A,int e){ return Point(A.x/e,A.y/e);}
 23 
 24 int Dot(Vector A,Vector B){ return A.x*B.x + A.y*B.y;}
 25 inline int Cross(Vector A,Vector B){ return A.x*B.y - A.y*B.x;}
 26 
 27 int cx[]={-1,1,1,-1};
 28 int cy[]={1,1,-1,-1};
 29 
 30 string path[APH][APH];
 31 Point pos[APH];
 32 char ch[APH][APH];
 33 
 34 Point getPoint(char c){
 35     if(c<='E') return Point(c-'A'+2,4);
 36     else{
 37         return Point((c-'F')%7+1,3-(c-'F')/7);
 38     }
 39 }
 40 
 41 bool check(Point A,Point B,Point C){
 42     bool b=0,l=0;
 43     A.x*=2; A.y*=2;
 44     B.x*=2; B.y*=2;
 45     C.x*=2; C.y*=2;
 46     Point u;
 47     for(int i=0;i<4;++i){
 48         u=Point(C.x+cx[i],C.y+cy[i]);
 49         if(Cross(A-u,B-u)>0) b|=1;
 50         if(Cross(A-u,B-u)<0) l|=1;
 51     }
 52     return b&&l;
 53 }
 54 
 55 string GetPath(int a,int b){
 56     string ans="";
 57     if(a==b) return ans;
 58     int ax=pos[a].x,ay=pos[a].y;
 59     int bx=pos[b].x,by=pos[b].y;
 60     for(int i= ax ; (ax < bx ? i<=bx : i>=bx) ; (ax < bx ? i++ : i--) ){
 61         for(int j= ay ; (ay < by ? j<=by : j>=by) ; (ay < by ? j++ : j--)){
 62             if(ch[i][j]==0) continue;
 63             if(check(pos[a],pos[b],pos[ch[i][j]-'A'])) ans+=ch[i][j];
 64         }
 65     }
 66     //if(ans.length()<=1) return "";
 67     ans = ans.substr(1,max((int)(ans.length()-2),0));
 68     //cout<<ans<<endl;
 69     return ans;
 70 }
 71 
 72 void prepare(){
 73     memset(ch,0,sizeof(ch));
 74     for(int i=0;i<APH;i++){
 75         pos[i]=getPoint('A'+i);
 76         ch[pos[i].x][pos[i].y]='A'+i;
 77 //        cout<<ch[pos[i].x][pos[i].y]<<" ";
 78     }
 79 //    cout<<endl;
 80     for(int i=0;i<APH;i++){
 81         for(int j=0;j<APH;j++){
 82             path[i][j]=GetPath(i,j);
 83 //            cout<<path[i][j]<<endl;
 84         }
 85     }
 86 }
 87 
 88 string connect(string st){
 89     string ans;
 90     ans+=st[0];
 91     for(unsigned int i=1;i<st.length();i++){
 92         ans+=path[st[i-1]-'A'][st[i]-'A'];
 93         ans+=st[i];
 94     }
 95     //ans+=st[st.length()-1];
 96     return ans;
 97 }
 98 
 99 bool check_str(string s,string str){
100     unsigned i,j;
101     for(i=0,j=0;i<s.length();i++){
102         if(s[i]==str[j]){
103             j++;
104             if(j==str.length()) return 1;
105         }
106     }
107     return 0;
108 }
109 
110 int main()
111 {
112     int t,n;
113     string st,s,str;
114     //freopen("data.txt","r",stdin);
115     ios::sync_with_stdio(false);
116     prepare();
117     cin>>t;
118     while(t--){
119         cin>>n>>st;
120         s=connect(st);
121         //cout<<"* "<<s<<endl;
122         bool f=0;
123         for(int i=0;i<n;i++){
124             cin>>str;
125             //cout<<str<<endl;
126             if(!f && check_str(s,str)){
127                 f=1;
128                 cout<<str<<endl;
129             }
130         }
131         if(!f) cout<<"NO SOLUTION"<<endl;
132     }
133     return 0;
134 }
/*6755*/

 

  

转载于:https://www.cnblogs.com/sineatos/p/3969014.html

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

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

相关文章

Ransac算法简介

给定两个点p1与p2的坐标&#xff0c;确定这两点所构成的直线&#xff0c;要求对于输入的任意点p3&#xff0c;都可以判断它是否在该直线上。初中解析几何知识告诉我们&#xff0c;判断一个点在直线上&#xff0c;只需其与直线上任意两点点斜率都相同即可。实际操作当中&#xf…

2018年AI和ML(NLP、计算机视觉、强化学习)技术总结和2019年趋势

来源&#xff1a;网络大数据1、简介过去几年一直是人工智能爱好者和机器学习专业人士最幸福的时光。因为这些技术已经发展成为主流&#xff0c;并且正在影响着数百万人的生活。各国现在都有专门的人工智能规划和预算&#xff0c;以确保在这场比赛中保持优势。数据科学从业人员也…

仿射变换的原理

在条形码识别软件中有图像预览的功能。有时预览的图像需要进行转置&#xff08;旋转180度或者90度&#xff09;、缩放、镜像&#xff08;左右反转&#xff09;等操作。OpenCV提供了相应的函数进行以上操作。例如&#xff1a; 转置&#xff1a;cv::WarpAffine() 缩放&#xff…

拯救顽疾大作战!IDC绘中国医疗AI生态图谱,英伟达献医疗影像新杀器

来源&#xff1a;智东西摘要&#xff1a;中国千家医院部署AI系统&#xff01;IDC医疗AI报告详解行业趋势和五大药方。2018年是令人唏嘘的一年&#xff0c;台湾作家李敖、动画大师高畑勋、相声表演艺术家师胜杰、央视主持人李咏、微软联合创始人保罗艾伦、武侠小说宗师金庸等一个…

存在描述所有生命的方程吗?

○ 生物体既复杂又有序&#xff0c;就像这片亚麻茎的横截面。研究人员希望最终发展出描述所有生命的基本方程。来源&#xff1a;原理关于生命&#xff0c;没有什么是简单的。每一秒钟&#xff0c;都有数百万个缜密有序的化学反应发生在一个细胞内&#xff1b;数十亿个单细胞生物…

CSS3滤镜

今天在办公室亲眼目睹了同事使用CSS3滤镜为一张漂亮的照片轮廓加上了阴影&#xff0c;瞬间亮瞎了我的的双眼&#xff0c;见笑了。 所以也迅速尝试使用CSS3滤镜让最新出炉的MUI LOGO也性感一把&#xff0c;试图来愉悦一下大家的双眼。已经等不及了&#xff0c;赶紧奉上今天的测试…

全面认识“边缘云”,中国首份边缘云白皮书发布

来源&#xff1a;中国电子技术标准化研究院、阿里云摘要&#xff1a;《边缘云计算技术与标准化白皮书》近期发布&#xff0c;定义了边缘云计算的概念和标准等。中心云和边缘云相互配合&#xff0c;实现中心-边缘协同、全网算力调度、全网统一管控等能力&#xff0c;真正实现“无…

【Tech】Mac上安装MAMP打开本地网页

不知道为什么实验室老是用些奇葩的东西&#xff0c;这次是madserve&#xff0c;主要是用来统计移动端广告点击率的&#xff0c;基于PHP/MYSQL实现。 昨天很快在Windows上搭好一个xampp&#xff0c;并用它建立了一个virtual host把madserve跑起来了。但是在mac上xampp建立virtua…

中国10大最震撼的无人工厂,你吃的用的都是这么来的!

来源&#xff1a;工业机器人摘要&#xff1a;你吃的用的那么多东西&#xff0c;早已不是“人造”的&#xff01;1.上海通用金桥工厂&#xff1a;386台机器人图中展示的是上海通用金桥工厂。这里号称中国最先进的制造业工厂、中国智造的典范。即使从全球来看&#xff0c;这个水平…

对人工神经网络“开刀”,利用神经科学消融法检测人工神经网络

来源&#xff1a;DeepTech深科技摘要&#xff1a;当谈及人工神经网络&#xff0c;黑箱问题总会引起热议&#xff0c;人们对黑箱问题的评价褒贬不一。有人认为黑盒是神经网络的优势&#xff0c;这代表神经网络的自主学习性&#xff0c;代表其自动学习以及自动完善的特性。但大部…

从车联网到工业智联网

来源&#xff1a;智车科技摘要&#xff1a;本文从工业互联网的典型应用—车联网谈起&#xff0c;从工业网联技术发展过程的视角分析了工业智联网的构架、关键技术和前沿趋势&#xff0c;对智联网视域下的未来智联交通作出了展望。随着智能技术的发展&#xff0c;从工业互联网发…

清华发布《AI芯片技术白皮书》:新计算范式,挑战冯诺依曼、CMOS瓶颈

来源&#xff1a;机器人 悦智网摘要&#xff1a;在由北京未来芯片技术高精尖创新中心和清华大学微电子学研究所联合主办的第三届未来芯片论坛上&#xff0c;清华大学正式发布了《人工智能芯片技术白皮书(2018)》。《白皮书》首次整合了国际化的学术和产业资源&#xff0c;紧扣学…

这是一份 AI 界最强年终总结

来源&#xff1a;AI 科技评论圣诞节元旦假期过后&#xff0c;谷歌资深 Fellow、谷歌 AI 负责人 Jeff Dean 代表所有谷歌的研究部门发出了他们的 2018 年度科研研究年终总结。这一年&#xff0c;谷歌的科研人员们在人工智能、量子计算、计算图形学、算法理论、软件系统、TPU、开…

89页PPT揭秘:人工智能产业爆发的拐点

来源&#xff1a;wpr摘要&#xff1a;如今&#xff0c;人工智能正在以前所未有的速度发展。目前&#xff0c;全球顶尖的IT和互联网公司都加大了对人工智能领域的投入&#xff0c;包括Google、Facebook、微软投入巨大&#xff0c;人工智能进入爆发式增长的拐点。这份关于人工智能…

医疗健康大数据:应用实例与系统分析

来源&#xff1a;网络大数据1 、概述随着信息技术和物联网技术的发展、个人电脑和智能手机的普及以及社交网络的兴起&#xff0c;人类活动产生的数据正以惊人的速度增长。根据国际数据公司(International DataCorporation&#xff0c;IDC)的报告&#xff0c;仅2011年&#xff0…

RANSAC算法的简单理解

图像拼接中看到了特征匹配的部分&#xff0c;特征匹配主要是特征点的匹配。在特征点匹配的时候&#xff0c;首先进行粗匹配&#xff0c;粗匹配通常是进行一对匹配点进行对比&#xff0c;误差越小越可能是一对匹配点&#xff1b;精匹配方法中&#xff0c;我们可以用到RANSAC(Ran…

IEEE论文:城市大脑,基于互联网大脑模型的智慧城市建设

作者&#xff1a;刘锋 互联网进化论作者 计算机博士前言&#xff1a;基于互联网大脑模型与智慧城市建设的结合&#xff0c;2015年2月在csdn第一次发布文章《基于互联网大脑架构的智慧城市建设探讨》提出了城市大脑的建设方向&#xff0c;地址&#xff1a;https://blog.csdn.net…

Python利用turtle绘制五角星

绘制用到的参数我们存放在data.txt文件中&#xff0c;data.txt文件内容如下&#xff1a; 300,0,144,1,0,0 300,0,144,0,1,0 300,0,144,0,0,1 300,0,144,1,1,0 300,0,108,0,1,1 184,0,72,1,0,1 184,0,72,0,0,0 184,0,72,0,0,0 184,0,72,0,0,0Python代码如下&#xff1a; # data.…

深度观察|工业物联网的应用场景和市场潜力

来源&#xff1a;readwrite编译&#xff1a;郭仁贤从人力资源到数字技术&#xff0c;物联网&#xff08;IoT&#xff09;改变了我们与周围世界互动的方式。在每一次的挑战和新的风险中&#xff0c;我们生活中最个人化的领域也迎来了新的机遇。物联网数字产业真正颠覆的是农业、…

scrapy 工作流程

Scrapy的整个数据处理流程由Scrapy引擎进行控制&#xff0c;其主要的运行方式为&#xff1a; 引擎打开一个域名&#xff0c;蜘蛛处理这个域名&#xff0c;然后获取第一个待爬取的URL。引擎从蜘蛛那获取第一个需要爬取的URL&#xff0c;然后作为请求在调度中进行调度。引擎从调度…