Codeforces Round #354 (Div. 2)
# | Name | ||
---|---|---|---|
A |
Nicholas and Permutation
standard input/output
1 s, 256 MB
|
x3384 | |
B |
Pyramid of Glasses
standard input/output
1 s, 256 MB
|
x1462 | |
C |
Vasya and String
standard input/output
1 s, 256 MB
|
x1393 | |
D |
Theseus and labyrinth
standard input/output
3 s, 256 MB
|
x375 | |
E |
The Last Fight Between Human and AI
standard input/output
1 s, 256 MB
|
x58 |
A Nicholas and Permutation
题意:允许你交换一次任意两个数位置,要使最大的数和最小的数的距离最大,输出最大值
题解:
大水题,就先找到最小的和最大的,把其中一个交换到尽头。
代码:
1 //#pragma comment(linker, "/STACK:102400000,102400000") 2 #include3 #include 4 #include 5 #include 6 #include 7 #include 8 #include
B Pyramid of Glasses
题意:摆了一个高脚杯金字塔,每秒钟往最上面倒一整杯,一杯满了会往两边溢出流到下面两个杯子,求n层高的金字塔,倒水k分钟后,有多少杯是满的。
题解:
直接把k分钟的全倒进最上面的杯子,然后模拟流下去就行。
代码:
1 //#pragma comment(linker, "/STACK:102400000,102400000") 2 #include3 #include 4 #include 5 #include 6 #include 7 #include 8 #include
C Vasya and String
题意:给出一个由a和b两个字母组成的字符串,最多修改其中k个,使得其中最长的连续同一字母子串最长,求最长的长度。
题解:
用双端队列,以a为本体扫一遍,再以b为本体扫一遍。以a为本体的时候,扫到b的话,就加到双端队列里,如果双端队列里超过k个,就从左端弹出,保持里面剩k个。记录全a子序列的区间左端,弹出的时候更新 区间左端L = 弹出的元素的位置+1。时刻更新ans = max(ans , R-L+1),R为当前扫到的位置。
只用扫两遍,O(n)。
代码:
1 //#pragma comment(linker, "/STACK:102400000,102400000") 2 #include3 #include 4 #include 5 #include 6 #include 7 #include 8 #include
D Theseus and labyrinth
题意:给出一个n*m的地图,英雄从(xt,yt)出发,要到达敌人所在地(xm,ym)。地图每个格子有设定:
^>v<代表向箭头方向有门,其他方向没门;
URDL代表某个方向没门,其他方向都有门,例如U,代表上面没门,其他3个方向各有一个门。
-|代表左右有门、上下有门。
+代表4个门,*代表没有门。
每分钟,英雄可以进行一项操作:
A.将所有方块顺时针转90度。
B.移动到相邻方块,要求自己方块到它的方向有门,它的方块到自己的方向也有门。
给出地图、英雄位置、敌人位置,求英雄到达敌人的最少分钟数,或者不能到达输出-1。
题解:
走迷宫,典型的广搜题。广搜每个节点有5种扩展:旋转90度、往4个方向走。注意记录某个点是否走过,需要save[x][y][z],x,y为该点坐标,z为旋转的次数,z<=3。
比较难写的是判断某个点能否向某个方向走一步,可以写到一个函数里can(x,y,z,j),(x,y)为当前坐标,z为当前旋转了几次(0~3),j为方向,我设定方向0123代表上右下左。
方块旋转、门的位置可以预处理,记到一个数组里,例如rot['<'][2] = '>',代表<符号旋转2次得到>符号。
例如door['-'] = "0101",代表-符号的门开在右、左。
这块写好了就无敌了。
我就写错了一个符号,卧槽,就一直wa6,比赛结束以后发现一个-写成了|,改了就过了。这种题要认真点写啊。
(可恶,刚才看官方题解,哇,直接预处理出4种方向的地图,a[x][y][z],就是简单的三维地图bfs了,卧槽,我怎么没想到)
代码:
1 //#pragma comment(linker, "/STACK:102400000,102400000") 2 #include3 #include 4 #include 5 #include 6 #include 7 #include 8 #include
E比赛时没空看,结束后看了,大概是说一个那样的式子,两个玩家交替操作,要是能使式子P(x) =B(x)Q(x),就算人类胜。其中B(x)是任意一种那样的式子,Q(x)=x-k,k为给出的数。给出当前局面,到人类动,问人类是否有必胜策略。好像有100多人过pre,最后只有五十多个ac,好像有点难,我还是先不看了。
不懂能不能抢到百度之星t恤啊!