携程 决赛 第一题 Crossword
//真是郁闷的一晚上
//比赛时看到这题是就感觉会做,感觉思路清晰 就去准备找第二题 ,因为感觉第二题是个经典问题,(我不会计算几何),就去搜索了下,然后找到求最小面积的,改来改去,一直Wa
// 然后就只剩下一个小时了 ,我决定放弃它,去写第一题 就是这题,然后整栋楼离奇断网什么的、、还调试了好久、、 // 思路 :将K个字符串算出Hash值 保存,同时要记录串的长度
// 这样在搜索时候 就可以根据Hash和字符串长度来筛选出某一位置可以填哪些串 因为串的起始和结束位置也能判断可以填的串可以多长
// 这样就是暴力搜索了
// 我对M个串位置进行了排序,然后我发现排不排序都一样,无所谓的 #include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
#include<functional>
#include<cmath>
#include <vector>
using namespace std;
vector <string> Hs[];
vector <int > len[];
int Map[][];
int n,m;
struct node
{
int x1,y1,x2,y2,k;
bool operator <(const node&t) const
{
if(x1==t.x1) return x2<t.x2;
return x1<t.x1;
}
} st[];
int K;
int flag;
char str[];
int ar[];
void dfs(int index)
{
if(index==m)
{
flag=;
return ;
}
int x1=st[index].x1,x2=st[index].x2;
int y1=st[index].y1,y2=st[index].y2;
int k=st[index].k;
int le=x1-x2+y1-y2;
if(le<) le=-le;
le++;
for(int i=; i<Hs[k].size(); i++)
if(le==len[k][i])
{
if(x1==x2)
{
int dir=y1<y2?:-;
int j,id=;
for(j=y1; j!=y2; id++, j+=dir)
if(Map[x1][j]&&Map[x1][j]!=Hs[k][i][id])
break;
if(j==y2)
{ id=;
for(j=y1; j!=y2; id++, j+=dir)
if(!Map[x1][j])
{
Map[x1][j]=Hs[k][i][id];
ar[j]=;
}
else
ar[j]=;
if(!Map[x1][j])
{
Map[x1][j]=Hs[k][i][id];
ar[j]=;
}
else
ar[j]=;
dfs(index+);
if(flag) return;
for(j=y1; j!=y2; j+=dir)
if(ar[j])
Map[x1][j]=;
}
}
else if(y1==y2)
{
int dir=x1<x2?:-;
int j,id=;
for(j=x1; j!=x2; id++, j+=dir)
if(Map[j][y1]&&Map[j][y1]!=Hs[k][i][id]) break;
if(j==x2)
{
id=;
for(j=x1; j!=x2; id++,j+=dir)
if(!Map[j][y1])
{
Map[j][y1]=Hs[k][i][id];
ar[j]=;
}
else
ar[j]=;
if(!Map[j][y1])
{
Map[j][y1]=Hs[k][i][id];
ar[j]=;
}
else
ar[j]=;
dfs(index+);
if(flag) return;
for(j=x1; j!=x2; j+=dir)
if(ar[j])
Map[j][y1]=;
}
}
}
}
int main()
{
int i,j;
int Case=;
while(scanf("%d %d",&n,&m),n|m)
{
if(Case++!=) printf("\n");
for(i=; i<m; i++)
scanf("%d %d %d %d %d",&st[i].x1,&st[i].y1,&st[i].x2,&st[i].y2,&st[i].k);
sort(st,st+m);
scanf("%d",&K);
for(i=; i<K; i++)
{
scanf("%s",str);
int hs=;
for(j=; str[j]!='\0'; j++)
hs=(hs*+str[j])%;
Hs[hs].push_back(str);
len[hs].push_back(j);
}
memset(Map,,sizeof(Map));
flag=;
dfs();
if(flag)
for(i=; i<=n; i++)
{
for(j=; j<n; j++)
if(Map[i][j])
printf("%c",Map[i][j]);
else
printf(" "); if(Map[i][j])
printf("%c\n",Map[i][j]);
else
printf(" \n");
}
}
return ;
}
携程 决赛 第一题 Crossword的更多相关文章
- Megcup 2017 决赛第一题 规则
2017Megcup 2017Megcup决赛第三题题解 只做出了一道题,虽然慢慢地退出了前128名,但还是要记录一下. 10点钟开始,一看第一题很熟悉,因为研究过格点图中电流问题,其实就是求解线性方 ...
- CTF---编程入门第一题 循环
循环分值:10 来源: 北邮天枢战队 难度:易 参与人数:1478人 Get Flag:467人 答题人数:523人 解题通过率:89% 给出一个循环公式,对于一个整数n,当n为奇数时,n=3n+1, ...
- [原]携程预选赛A题-聪明的猴子-GCD+DP
题目: 聪明的猴子 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- 第三届蓝桥杯Java高职组决赛第一题
题目描述: 看这个算式: ☆☆☆ + ☆☆☆ = ☆☆☆ 如果每个五角星代表 1 ~ 9 的不同的数字. 这个算式有多少种可能的正确填写方法? 173 + 286 = 459 295 + 173 = ...
- poj1182 and 携程预赛2第一题 带权并查集
题意: 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底 ...
- 【BFS + Hash】拼图——携程2017春招编程题2
写在前面 前天参加了携程的网测--还是感觉自己太!渣!了! _(:з」∠)_ 时光匆匆啊,已经到了开始思考人生的时候了(算了不矫情了)--总之写个博客来督促一下自己.之前太懒了,很多时候都是输在 ...
- 携程Java后台开发三面面经
前言 携程是我面试的第一个互联网公司,投递的岗位是后台开发实习生,总共面了三面,止步于人才库.中间兜兜转转,复杂的心理活动,不足与外人道也.唯有面试的技术部分与大家共享. 宣讲会完了之后有个手写代码的 ...
- 剑指Offer——携程笔试题+知识点总结
剑指Offer--携程笔试题+知识点总结 情景回顾 时间:2016.9.17 19:10-21:10 地点:山东省网络环境智能计算技术重点实验室 事件:携程笔试 总体来说,携程笔试内容与其它企业笔试题 ...
- 今天携程出事了:让我们来学习下http的响应码
就在今天,2015年5月28日,中国最大的旅游机票预订网站--携程网粗大事了.据传携程网的数据库被人物理删除了,而容灾备份的数据又无法正常使用,服务器全面遭受瘫痪.每小时给携程带来的损失约100万美元 ...
随机推荐
- Openssl VS编译方法
工具: 1. 编译环境win10+vs2015专业版 2. ActivePerl工具,官网下载链接:http://www.activestate.com/activeperl/downloads 3. ...
- linux du命令的疑惑
起因是测试rsync传输数据.传输完成后,想看一下传输的文件是不是完整,所以检测了下源目录和目标目录的大小,竟然出现了巨大的差距: [root@w anaconda3]$ du -sh ./ .9G ...
- ubuntu18.04里更新系统源和pip源
一.修改ubuntu系统源 我的ubuntu系统是在清华的开源网站上下的,所以我还以为他应该就帮我弄好源了,可是没想到下载的还是非常慢,看到下载的时候网址前还有个us,就知道不是国内源了.所以这里我们 ...
- 读懂 ECMAScript 规格
概述 规格文件是计算机语言的官方标准,详细描述语法规则和实现方法. 一般来说,没有必要阅读规格,除非你要写编译器.因为规格写得非常抽象和精炼,又缺乏实例,不容易理解,而且对于解决实际的应用问题,帮助不 ...
- 在xampp集成环境下使用 php 连接oracle
今天搞了大半天,终于成功了. 1. 首先需要让xampp支持oracle,直接按这个网页上说的做就行.http://nimal.info/blog/2009/activate-oracle-on-xa ...
- linux五大搜索命令学习
五大搜索命令学习 分别解释locate,find,which,whereis,grep 五大linux搜索命令 locate 解释:由man手册可以看出,locate查找就是根据文件名进行查找,只是依 ...
- Python list降序排序
test = [6,1,2,3,4,5] a = sorted(test,reverse=True) print a 结果如下: [6, 5, 4, 3, 2, 1] 你可以参考下sorted,里面是 ...
- 5G信令(就是用户身份信息)——手机开机后,先从USIM中读取之前运营商分配的临时身份信息GUTI/TMSI,发送携带该身份信息的信令给基站,请求接入运营商网络。
5G时代,跟IMSI-CATCHER SAY GOODBYE from:https://unicorn.360.com/blog/2018/04/18/GoodBye_5G_IMSI-Catcher/ ...
- Django之model操作(续)
Django中的源码续 ################################################## # PUBLIC METHODS THAT RETURN A QUERYS ...
- 完成users中的models
用户表中添加邮箱验证码数据表,轮播图数据表 from django.db import models from django.contrib.auth.models import AbstractUs ...