携程 决赛 第一题 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万美元 ...
随机推荐
- log4j和logback
Log4j和logback Log4j简介 Log4j(log for java) 1.是Apache的一个开源项目: 2.是使用Java语言编写的一个日志框架: 3.用于记录程序中的日志信息: 4. ...
- IE 中的 button type默认值问题
今天遇到一个问题. 将项目页面的渲染模式从 IE7 改为 IE10 后(<meta http-equiv="X-UA-Compatible" content="IE ...
- 设计模式--原型模式C++实现
原型模式C++实现 1定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 2类图 3实现 class Prototype { protected: Prototype(); publ ...
- 键盘对应数字-keycode值大全(转)
event.keycode值大全 keycode 8 = BackSpace BackSpace keycode 9 = Tab Tab keycode 12 = Clear k ...
- Android实现布局控件自定义属性
一.自定义ViewGroup 1.onMeasure 决定内部View(子View)的宽度和高度,以及自己的宽度和高度 2.onLayout 决定子View放置的位置 3.onTouchEvent 定 ...
- RabbitMQ 如何保证消息不丢失?
RabbitMQ一般情况很少丢失,但是不能排除意外,为了保证我们自己系统高可用,我们必须作出更好完善措施,保证系统的稳定性. 下面来介绍下,如何保证消息的绝对不丢失的问题,下面分享的绝对干货,都是在知 ...
- Highcharts 标示区曲线图;Highcharts 对数图表;Highcharts 时间间隔图表
Highcharts 标示区曲线图 配置 使用 yAxis.plotBands 属性来配置标示区.区间范围使用 'from' 和 'to' 属性.颜色设置使用 'color' 属性.标签样式使用 'l ...
- day5-logging模块
一.概述 好的程序开发,往往会兼顾到日志输出的需求,以便给用户提供必要的日志信息便于确认程序运行状态.排错等等.这些日志一般包括程序的正常运行日志.访问日志.错误日志.数据保存日志等类型.在pytho ...
- UI-基本控件的简单使用
1.IBAction: //====================== 1> 能保证方法可以连线 2> 相当于void 2.IBOutlet: 1> 能保证属性可以连线 3.常 ...
- java语言基础-进制
一丶Java语言基础:进制 1.进制的四种表现形式 (1).二进制:0,1 满2进1. (2).八进制0-7 :满8进1,用0开头表示. (3).十进制:0-9 满10进1. (4).十六进制:0-9 ...