2014江西理工大学C语言程序设计竞赛高级组题解

1001 Beautiful Palindrome Number

枚举回文数字前半部分,然后判断该数字是否满足,复杂度为O(sqrt(n))!

1002 Recovery Sequence 

本题的核心在于求出约瑟夫环出队序列,如果直接暴力的话复杂度约为O(N*N)将会超时。
这里可以使用 树状数组或者线段树或者SBt等数据结构 来优化
根据本次出队位置和剩余人数的数量,可以算出下次出队的位置,从而使用数据结构来查询其真实标号。
对于每组样例的复杂度根据不同的数据结构为 O(nlgn)或O(nlgnlgn)

1003 五子棋


这题需要一点思维和模拟。如果单纯的判断的话,情况会很多。

比如有些坑人的数据:

20
...............
...............
...............
.......@.......
......@........
.....@.........
....@XXXXX.....
...............
...............
...............
...............
...............
...............
...............
...............

...............
...............
...............
...............
...............
...............
...............
.....X..@......
......X@.......
......@X.......
.....@..X......
....@....X.....
...............
...............
...............

...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............


...............
...............
...............
...............
...............
...............
...............
...............
.......X.......
...............
...............
...............
...............
...............
...............

...............
...............
...............
...............
...............
...............
...............
...............
.......@.......
...............
...............
...............
...............
...............
...............

...............
...............
...............
...............
...............
...............
...............
.......@@@.....
.......XXXXX...
...............
...............
...............
...............
...............
...............

...............
...............
...............
...............
...............
...............
........X......
.......X.......
......X@@@@@...
.....XX........
...............
...............
...............
...............
...............

...............
...............
...............
...............
...............
........@......
......X.@X.....
......XX@@.....
......XX@......
.....X@@@X.....
.....@X.X......
...............
...............
...............
...............

...............
...............
...............
...............
...............
........@......
......X.@X.....
......XX@@.....
......XX@......
.....X@@@X.....
.....@X........
...............
...............
...............
...............

...............
...............
...............
...............
...............
......X.X......
......X.@X.....
......XX@@.....
....X@XX@X.....
.....X@@@X.....
.....@X@X......
........@......
.........@.....
..........@....
...........@...

...............
...............
..............@
.............@.
..........X.@X.
...........@X..
..........@X...
........X@X....
.......X@......
......X@.......
......@X.......
.....@X........
...............
...............
...............

...............
...............
...............
...............
...............
.........X.....
.........X.....
.........X.....
..@@@@@@@.@@@@@
......X..X.....
.......XXXX....
.......X.X.....
.......X.......
...............
...............

...........@@@@
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
..........XXXXX

X..............
.X.............
..X............
...X...........
....X..........
.....X..@......
......X.@@.....
.......X@@.....
...@...@X@.....
.........@.....
...............
...............
...............
...............
...............

.....@@XXXXXXXX
.....@@....@@@X
.....@.....@..X
.....@.....@..X
...........@..X
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............

...............
...............
...............
....@XXXXX.....
....@..........
......@@.......
....X..@.......
.....X..@......
....@.X..@.....
.......X.......
........X..@...
...............
...............
...............
...............

...........@@@@
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
...............
..........XXXXX

XXXX@@@@XXX@@@@
@@@@XXXX@@@@XXX
XXX@@@X@@@XXXX@
@@@@XXXX@@@@XX@
...............
...............
...............
...............
...............
....@@@@XXX....
...XXXX..@@....
...............
...............
...............
..........XXXX.

.........X.....
........X......
.......X.......
......X.@......
.....X@.@......
....X@@.@......
...X.@..@......
....X@....@....
.....X.........
.....@X........
.....@.X.......
........X......
.........X.....
...............
...............

...............
...............
.......X.......
......X.@......
.X...X@.@......
..X.X@@.@......
...X.@..@......
..X.X@....@....
.X...X.........
.....@X........
.....@.X.......
...............
...............
...............
...............
数据
 1 black
 2 wrong state
 3 continue
 4 continue
 5 wrong state
 6 wrong state
 7 white
 8 wrong state
 9 white
10 white
11 wrong state
12 wrong state
13 black
14 wrong state
15 wrong state
16 wrong state
17 black
18 continue
19 wrong state
20 black
数据答案

总之,纯判断很麻烦。

这题采用一种暴力加模拟的方法会比较有效。

首先只有白子个数等于黑子个数,或者黑子个数多一个时,才可能为一种合法状态。

当白子个数等于黑子个数时,说明最后一个落子的是白子。  那么枚举棋盘上所有白子,把这个白子移出。 然后在这种状态下,只需要判断黑、白子是否有五个相连,如果有五个相连的,那么说明状态不合法。 如果没有五个子相连那么说明状态是合法的, 然后再把白子补回去判断白子是否赢. 如果白子也没有五个相连的那么就是未分出胜负。

同理当黑子多出一个的时候。

1004 丁丁历险记

这题解法有多种,最明显的方法是在A里面枚举所有点,找到A+B的最短路,然后选择一个最小的。 如果没有路径,输出No。 这题我很是仁慈,数据只开到200,所以100*200*200的dij ,200*200*200的floyd都是可以过的

比较快速的解法是从A+B进行一次最短路,找到最近的一个A中的点。  把A类点缩成一个点也行。

因为这题路径长度只有1,所以直接在A+B处进行一次BFS就可以了。

 1005平行四边形

对于每一行来考虑,若左端点是整点,那么就 有(边长值-1)个点在里面
若不是整点则 有(边长值)个点在里面,所有行处理完就得到结果

PS.这题要谨慎使用浮点数,能用整形判断尽量用整形判断是否在边界

1006 木木换班

定义一个结构体代表一个班级,其中有两个变量a,b表示女生个数和男生个数。 然后按相应的优先级排序选最大的即可。

1007 0.3333333333........

这题很有意思,存在多种做法,对于题目中的数据,若是有限小数可以证明在小数点1000位后
一定全为0,所以直接除1000次就可以了。。。

1008 定义域

读懂了题意,直接输出[a-1,b-1]即可。

原文地址:https://www.cnblogs.com/chenhuan001/p/4158817.html