携程 决赛 第一题 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万美元 ...
随机推荐
- Asp.Net将Session保存在数据库中
1.由于项目dll文件变动比较频繁,而保存登陆的状态又保存在Session中,所以导致用户经常无故掉线.(dll变动的时候导致Session丢失) 2.有一种方法可以长期保存session,那就是se ...
- struts2中<s:checkboxlist/>的用法详解
Html代码 选择角色<br> <s:checkboxlist list="#request.roleuserList" listKey="roleId ...
- Memcached CAS 命令
Memcached CAS(Check-And-Set 或 Compare-And-Swap) 命令用于执行一个"检查并设置"的操作 它仅在当前客户端最后一次取值后,该key 对应 ...
- canvas实现鼠标拖拽矩形移动改变大小
项目的一个新需求,动态生成矩形框,鼠标点击拖动改变矩形框的位置,并可以调整大小. 之前做过一个小demo,需求类似,但是在canvas内只有一个矩形框,拖动移动,当时记得是用isPointInPath ...
- Angular如何给动态生成的元素绑定事件
在AngularJS中,操作DOM一般在指令中完成,事件监听机制是在对于已经静态生成的dom绑定事件,而如果在指令中动态生成了DOM节点,动态生成的节点不会被JS事件监听. 举例来说: angular ...
- kotlin for android----------MVP模式实现登录
学习了Kotlin,随便来个小案例,以MVP+Kotlin 来实现登录的一个小案例,希望对大家有所帮助,效果图: MVP: Model Model 是用户界面需要显示数据的抽象,也可以理解为从业务数据 ...
- program发展史及以后预测
三个阶段:第一个阶段是1950年代到1960年代,是程序设计阶段,基本是个体手工劳动的生产方式.这个时期,一个程序是为一个特定的目的而编制的,软件的通用性是很有限的,软件往往带有强烈的个人色彩.早期的 ...
- torch 深度学习(3)
torch 深度学习(3) 损失函数,模型训练 前面我们已经完成对数据的预处理和模型的构建,那么接下来为了训练模型应该定义模型的损失函数,然后使用BP算法对模型参数进行调整 损失函数 Criterio ...
- 十九 Python分布式爬虫打造搜索引擎Scrapy精讲—css选择器
css选择器 1. 2. 3. ::attr()获取元素属性,css选择器 ::text获取标签文本 举例: extract_first('')获取过滤后的数据,返回字符串,有一个默认参数,也就是如 ...
- jQuery-轮播图(友善滴滚动切换)
线上实例:http://lgy.1zwq.com/slide/ [处理] 这里的图片滚动轮播,做了点小处理:当在第1页状态时,你点击第5页,图片的滚动是一张滑过,而不是从2-3-4-5(这种的多张滚动 ...