2017.1.16【初中部 】普及组模拟赛C组 match 题解
2017-01-16 17:22
387 查看
原题:
http://172.16.0.132/junior/#contest/show/1366/1题目描述:
小x在解说F7决赛时的搭档是韩乔生,以至于小x没有任何能说上话的机会。无聊的他玩起了填字游戏。一个3*3的九宫格里,每个格子里都被填上了一个字母,从而我们得到了6个单词。现在,小x随手写了6个单词,他想让你帮他找到一种填字母的方案,使得这6个单词都出现在了九宫格里。输入:
共六行,每行一个长度为3的单词(全部大写)。输出:
如果找不到方案,输出“0”(不包含引号)如果能找到,输出包含3行,第i行对应九宫格的第i行(最后一行行末要换行)。
如果有多种方案,请输出每种方案对应的字符串中字典序最前的一种(将行与行首尾相连,就可以得到一个字符串)。
样例输入:
样例输入1:ANA
ANA
DAR
DAR
RAD
RAD
样例输入2:
EVO
HEP
HIR
IVA
PAD
ROD
样例输入3:
AKO
CES
DOC
DON
ESI
KES
样例输出:
样例输出1:DAR
ANA
RAD
样例输出2:
HEP
IVA
ROD
样例输出3:
0
数据范围限制:
如果找不到方案,输出“0”(不包含引号)分析:
这道题目我们可以爆搜,当然不能每个位置搜,这样会爆,所以我们可以分层搜;先将单词从小到大排序(题目要求要满足字典最小序),然后x表示当前搜到第x层,当x>3时,我们判断对于每一列是否存在这样一个单词(因为我们是按层来搜的,所以不用担心每一行的单词不存在)
实现:
var s,ans:array[0..1000]of string; w:string; i,j,t:longint; bz,r:array[0..1000]of boolean; b:boolean; function check:boolean; begin r:=bz; for i:=1 to 3 do begin w:=''; b:=false; for j:=1 to 3 do w:=w+ans[j,i]; for j:=1 to 6 do if (w=s[j])and(r[j]) then begin b:=true; r[j]:=false; break; end; if b=false then exit(false); end; exit(true); end; procedure dg(x:longint); var i,t:longint; begin if x>3 then begin if check then begin for t:=1 to 3 do writeln(ans[t]); halt; end; exit; end; for i:=1 to 6 do if bz[i] then begin bz[i]:=false; ans[x]:=s[i]; dg(x+1); bz[i]:=true; ans[x]:=''; end; end; procedure qsort(x,y:longint); var i,j:longint; mid:string; begin i:=x; j:=y; mid:=s[x]; repeat while s[j]>mid do dec(j); while s[i]<mid do inc(i); if i<=j then begin s[0]:=s[i]; s[i]:=s[j]; s[j]:=s[0]; inc(i); dec(j); end; until i>j; if x<j then qsort(x,j); if i<y then qsort(i,y); end; begin assign(input,'match.in');reset(input); assign(output,'match.out');rewrite(output); fillchar(bz,sizeof(bz),true); for i:=1 to 6 do readln(s[i]); qsort(1,6); dg(1); writeln(0); close(input);close(output); end.
相关文章推荐
- Oracle——存储过程
- Android 笔记:识别银行卡,获取银行卡卡号
- mac下virtualbox配置全网通
- 栅格分类---自然间断点 出错!NaturalBreaksClass
- iTop4412之I2C裸机操作
- Android自定义View之ProgressBar出场记
- mysql持续学习
- linux shell 输入输出重定向 分析
- 为什么在函数的声明后面还有一个 const? 如:void fun() const;
- canvas下雪
- 【Leetcode】448. Find All Numbers Disappeared in an Array
- python openpyxl练习--打印九九乘法表到excel中。
- poj_3321 Apple Tree(dfs序+树状数组)
- 带你全方位学习Picasso(一)
- select2的搜索框不能输入搜索内容
- js中前台数据左右切换移动
- HDU2363 最短路+贪心
- 统计C语言程序行数
- python3.4项目打包
- 立体视觉标定和校正