2016.08.18【初中部 NOIP普及组 】模拟赛

来源:互联网 发布:中金公司 知乎 编辑:程序博客网 时间:2024/06/08 01:01

做了一段时间提高组后,回到普及组水题,但怎么有种被题虐的感觉!


100+40+0+70=210分=第8名 居然被几个蒟蒻给抄了~MDZZ


总结:


第一题我很快就切了,



第二题看了半天终于看懂了题意,

但毕竟没玩过2048游戏,还是被规则给坑了啊~

打了六千多字节的程序,只有四十分,耗了我好多时间搞到第三题爆搜30分都没时间了啊大哭


至于第三题,看了一下马上弃疗了,想着最后打个爆搜,谁知被第二题耗了太多时间,来不及了~


第四题、、看完题目脑袋里只有四个字:妈的智障! 


这题跟昨天C组的第二题https://61.142.113.109/senior/#main/show/3077非常像,只是数据大了许多~而我昨天C组第二题是用水法卡空间水数据的啊~ORZ.....比赛时只能二维存储+SPFA爆空间70分了、、后来只得学了那个神奇的一维存储方法,轻松改完这题


好的, 下面就写一下题解吧


题解:

(注明:本来按我写题解的格式是要附上参考程序的,但是鉴于这是做普及组的题目,难度系数相对较低,不需要程序辅助理解,放上只会可能引来抄袭,因此就.......)


第一题:

https://61.142.113.109/junior/#main/show/2048

题目描述:

2048. 【8.18】跳格子 

        大家都说要劳逸结合,Ayumi, Mitsuhiko, Genta画完方格就出去运动啦!
        他们来到了一片空地,画了N个连续的方格,每个方格上随机填上了一个数字,大家从第一个格子开始,每次可以向后跳不超过当前格子上的数的步数,大家开始就此比赛,看谁跳到最后一个格子的步数最少。
        作为队长的Genta显然是想获得胜利的,所以他打电话给Conan求助,可是Conan在玩游戏,所以就向你求助了。

输入

从文件jump.in 中读入数据。
输入第一行包含一个整数N,表示画的格子的个数。
第二行包含N整数,表示每个格子上的数 。

输出

输出到文件jump.out 中。
输出一行,表示跳的最少步数。

样例输入

5
2 3 1 1 1

样例输出

2

数据范围:


题目大意:

有N个格子,每个格子上有一个数,你从第一个格子出发,每次可以跳不超过当前格子数的步数,求如何用最少跳的次数跳到第N个格子


解题思路:

很明显的这是一道DP题,设f[i]表示跳到第i个格子最少要跳多少次,之后dp方程就显而易见的出来了




第二题:

https://61.142.113.109/junior/#main/show/2049

题目描述:

2049. 【8.18】2048 

此时,Conan却在一旁玩着2048。
这是一个4*4的矩阵,初始全为0。每次一个没有数字的格子中会随机出现一个2或4,每次可以选择上下左右其中一个方向去滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢外,相同数字的方块在靠拢、相撞时会相加。
Conan想看看今天自己运气咋样,于是就闭着眼睛,在屏幕上随便滑来滑去。所以这个模拟的任务就交给你了。过了一会,他然后睁开眼睛,如果游戏没有结束(滑动后如果没有空格子,则游戏结束),请输出矩阵(格式参见样例),否则输出“Game over!”(不包含引号)。

输入

从文件 game.in 中读入数据。
输入第一行包含一个整数N,表示Conan滑了几下。
接下来N 行,x, y, v, f表示第x行与第y列出现数字为v后,Conan滑的方向为f(f为字符,U, D, L, R分别表示向上下左右滑)。
行从上往下1-4标号,列从左往右1-4标号。
数据保证在游戏未结束时,只会在空白区域出现数字。

输出

输出到文件game.out 中。
输出按题目描述。

样例输入

8

1 3 4 L

2 3 2 U

2 4 2 R

4 1 2 L

3 4 2 L

3 2 2 D

1 3 4 R

1 3 2 U

样例输出

0 0 2 8

0 0 0 2

0 0 0 8

0 0 0 0

数据范围限制

【数据规模与约定】
对于100%的数据满足N<=1000 


题目大意:

(这题很坑,理解题目非常重要!)

在一个4*4的矩阵里,要进行n次操作,每次会在一个没有数字的方块产生一个数字2或4,并且进行一次方向为f(f为字符,U, D, L, R分别表示向上下左右)的滑动,每个有数字的方块都将往滑动方向移动,直到碰到边缘为止,如果在移动时碰到不同的数,则停止移动,如果移动时碰到相同的数,则把它们相加(如果当前移动的数在本回合已经相加过,或者当前和它相同的数在本回合已经相加过,那么就不进行相加,并停止移动)


解题思路:

暴力模拟,打了9千多字节的代码,调试并处理了无数细节问题,终于对了、、



第三题:

https://61.142.113.109/junior/#main/show/2050

题目描述:

2050. 【8.18】游戏 

“Ran,今天我要在Hakase家打游戏,不回来了。”
“Ran,Hakase新发明了游戏,我今天住博士家。”
“Ran,Conan今天要在我家通宵打游戏。”
终于有一天,电脑被打坏了……2333
所以Conan要前往专卖店买新的,正好专卖店正在促销,一共有三种礼包:
豪华礼包:一个 U盘、一个鼠标和一个机械键盘。
幸运礼包:一个 U盘、两个鼠标。
普通礼包:两个 U盘、一个鼠标。
卖店内准备了 a 个 U盘、b 个鼠标和 c 个机械键盘。为了给顾客带来足够多的惊喜,店长希望相邻两位领礼包的顾客拿到的礼包类型都是不同的。店长想知道这些奖品最多可以发出多少份礼包。可是店长毕竟没有Conan聪明,所以请教Conan,可是Conan要急着回去打游戏,所以就交给你啦。

输入

从文件store.in 中读入数据。
输入第一行包含一个正整数 T。
接下来T行每行包含3个正整数a, b, c,依次表示U盘、鼠标和机械键盘各有多少个。

输出

输出到文件store.out 中。
输出T行,每行一个整数,表示最多能发出多少份礼包。

样例输入

2
4 4 0
1 1 1

样例输出

2
1

数据范围:



题目大意:

有3种礼包,分别为:

豪华礼包:一个 U盘、一个鼠标和一个键盘。
幸运礼包:一个 U盘、两个鼠标。
普通礼包:两个 U盘、一个鼠标。

现在有U盘x个,鼠标y个,键盘z个,要求使得每种相同礼包摆放位置不相邻,求最多可以摆放多少个礼包


解题思路:

正解的方法看得我一脸懵逼~然而同学的方法我也不能完全理解,所以果断弃疗~



第四题:

https://61.142.113.109/junior/#main/show/2051

题目描述:

2051. 【8.18】极其简单的最短路问题 

    小C终于被小X感动了,于是决定与他看电影,然而小X距离电影院非常远,现在假设每条道路需要花费小X的时间为1,由于有数以万计的好朋友沿路祝贺,导致小X在通过某些路不得不耗费1的时间来和他们聊天,尽管他希望尽早见到小C,所以他希望找到一条最快时间到达电影院的路。
   一开始小X在1号点,共有N个点,M条路,电影院为T号点。

输入

   第一行3个正整数,分别为n,m,t
   以下m行,每行3个数,表示连接的编号以及权值
   (注意,可能会有重边)

输出

   一行一个数,表示1到t的最短路

样例输入

10 12 6
3 9 2
6 9 2
6 2 1
3 1 1
1 9 2
2 8 2
7 10 1
7 2 1
10 0 1
8 1 1
1 5 2
3 7 2

样例输出

4

数据范围限制

数据范围:
  30%:n<=10 m<=20
  60%:  n<=1000  m<=20000
  100%: n<=5000000  m<=10000000



题目大意:

在一个有n个点m条边的地图里,已知这m条边的长度,求第一个点到第t个点的最短距离


解题思路:

标准的spfa,只是要用一维数组储存边,否则会爆空间啊~制杖的我之前碰到类似这种顶点数量很大的图都是卡空间的,但这次终究还是卡不过去了啊~只能脑补了一下一维数组存储边的方法,其实呢,就是只要......算了我勉强理解就不错了,讲出具体方法这事还是留给神犇们吧~


2 0
原创粉丝点击