【题解】2015年12月 测试试题

  

  给[学弟们]出了一次测试题,题目比较水,大概在普及难度QAQ。

  题目都是以前我做过的,只是简单修改了一下题面,主要目的还是考一下书上知识的运用。

  然而 。。。不出意料的是。。。

运筹帷幄

(road.cpp)

      

【题目描述】

       刘邦军行至迷糊林,见其中瘴气围绕,又有青狼猛虎之兽,难于前行。

       已知迷糊林是一个共有n个结点的图,点与点之间共有m条道路相连接,每条路有参数t,c,分别表示行走于该路的时间以及兵士损失量。你已知道,刘邦除了脸皮厚什么都不会而且兵力少得可怜,所以需要在刘邦不死(士兵会先死)的情况下尽快走出迷糊林。

       刘邦踞鞍而问曰:“子房,如之奈何?”。

【文件格式】
输入文件:

       第一行两个整数n,m,表示节点数以及边数。

       以下m行每行4个整数u,v,c,t,表示u点以及v点之间有一条参数为c,t的边,c为兵士损失量,t为耗费时间。

       第m+2行有两个整数s,t,表示起点与终点。

       第m+3行有一个整数k,表示刘邦军的兵力。

输出文件:

       一个整数表示能走出迷糊林的最短时间,如果不能走出请输出-1。

【样例数据】

Input(road.in)
4 5
1 2 2 3
1 3 3 5
1 4 7 10
2 4 4 6
3 4 2 6
1 4
5

Output (road.out)

11

【数据约定】

       n<=5000 ,m<=40000 , c,d<=300 , k<=10^9

[Hint]

本题数据随机生成。

   【思路】  

    最短路优化搜索。

      链接:http://www.cnblogs.com/lidaxin/p/4911740.html

信息交换

(message.cpp)

【题目描述】

       Byteland战火又起,农夫John派他的奶牛潜入敌国获取情报信息。

       Cow历尽千辛万苦终于将敌国的编码规则总结如下:

       1 编码是由大写字母组成的字符串。

2 设定了密字。加密的过程就是把原信息的字母替换成对应密字。

       3 一个字母有且仅有一个对应密字,不同字母对应不同密字。

       如今,Cow终于获取了敌国发送的一条加密信息和对应的原信息。Cow如下破解密码:扫描原信息,对于原信息中的字母x,找到它在加密信息中的对应大写字母y,且认为y是x的密字。

       Cow的工作停止于以下情况:

       1 信息扫描完毕且没有差错

       2 扫描完毕但有字母没有在原信息中出现。

       3 扫描中出现矛盾或错误,即违反上述的规则。

       现在,John发来信息,要求Cow利用破译的密字翻译一条刚刚截获的敌国信息。

【文件格式】

输入文件:

       第一行为Cow知道的一条加密信息。

       第二行为加密信息的原信息。

       第三行为John要求Cow翻译的加密信息。

输出文件:

       一行,如果出现2 3 所示的停止情况则输出“Failed”,否则翻译John传送的信息。

【样例数据】

#1

Input

QWERTYUIOPLKJHGFDSAZXCVBN

ABCDEFGHIJKLMNOPQRSTUVWXY

DSLIEWO

Output

Failed

#2

Input

QWERTYUIOPLKJHGFDSAZXCVBNM

ABCDEFGHIJKLMNOPQRSTUVWXYZ

IQHPOQKGHU

Output

HANJIALONG

  

  【思路】

    简单模拟

      NOIP2009 T1

树上奶牛

(tree.cpp)

【题目描述】

       农夫John的奶牛不是住在地上而是住在树上的QWQ。

       奶牛之间需要串门,不过在串门之前他们会向John询问距离的大小。可是John的产业有点大奶牛的个数有点多,这让农夫John感到头疼,你能帮助他吗?

       Ps:这里提到的树为OI界的[树],即无向无环图。而且因为一棵树的承载量是有限的,所以所有的奶牛可能会分布在不同的树上,即OI界的[森林]。

【文件格式】

输入文件:

       第一行两个整数n m,分别表示n个结点m条边。

       以下m行,每行三个整数u,v,w,分别表示u,v之间有一条距离为w的树边。

       第m+2行一个整数q,表示询问的个数。

       以下q行,每行两个整数u,v,表示奶牛要询问u,v之间的距离。

输出文件:

       输出q行,每行对应一个询问输出答案。如果u,v不处于同一棵树上,请回答-1。

【样例数据】

Input(tree.in

5 3

1 3 5393

3 4 2845

4 2 3757

3

1 4

1 2

1 5

Output (tree.out)

8238

11995

-1

【数据约束】

对于30%的数据,n<=1000 , m<=1000 , q<=10000。

对于100%的数据,n<=10000,m<=40000,q<=100000。

[Hint] 对于所有数据皆随机生成。

   【思路】

    LCA问题。

    ps:话说在出题之前我并没有看过 bzoj 1602  =-=

     

全排列

(long.cpp)

【题目描述】

       给定两个1..n的全排列,求两个全排列的最长公共子串。

【文件格式】

       输入文件第一行一个整数为n,第二 三行分别有n个数表示两个全排列。

       只输出一个整数表示LCP大小。

【样例数据】

Input (long.in)

       5

1 3 2 4 5

2 5 1 2 3

Output (long.out)

       2

【数据描述】

       对于30%的数据: n<=3000

       对于100%的数据:n<=100000

  【思路】

   LCS转LIS+LIS的O(nlogn)算法

     链接:http://www.cnblogs.com/lidaxin/p/4897055.html

  测试数据和代码戳这儿:http://pan.baidu.com/s/1nuf2I2d

原文地址:https://www.cnblogs.com/lidaxin/p/5103284.html