2016郑州大学ACM/ICPC训练赛 Round4

来源:互联网 发布:nginx luci 编辑:程序博客网 时间:2024/05/02 15:49

B题:追踪术

Description

  赏金猎人在追捕他的猎物。已知当前赏金猎人与猎物相距s米,赏金猎人每秒移动a米,猎物每秒移动c米。赏金猎人有一个技能追踪术,使用后,他的移动速度将会变为每秒移动b米(b>a),使用该技能需要持续施法t秒,持续施法期间,赏金猎人不能移动。请问,赏金猎人最快需要多长时间才能追上猎物(与猎物距离为0时视为追上)。

Input

多组数据。

每组5个整数,s,a,b,c,t (1<=s<=1000,1<=a<b<=100,1<=c<=100,1<=t<=10)。含义见题目。

Output

输出一个数,赏金猎人追上猎物所需最短时间,保留6位小数。若无法追上,输出-1。

Sample Input

10 1 2 1 110 1 2 3 1

Sample Output

12.000000-1
代码如下:

#include <stdio.h>int main(){int s, a, b, c, t;double x, y;while ( scanf( "%d%d%d%d%d", &s, &a, &b, &c, &t) != EOF){if ( b <= c)printf( "-1\n");else{x = 1.0 * ( s + b * t) / ( b - c);if ( a <= c)printf( "%f\n", x);else{y = 1.0 * s / ( a - c);x = x > y ? y : x;printf( "%f\n", x);} }}return 0;} 

对于每组输入,若b不大于c则必然不可能追上,直接输出-1


而在b大于c时,若a也大于c则应当计算使用技能和不使用技能所用的时间,取其小者。若a不大于c,则只能使用技能才能追上。。。


C题:最长匹配子串

Description


定义一个满足括号匹配的字符串为完美串。一个由'(',')'组成的字符串,怎么才能求出
来字符串S中最长的完美串(S的子串)的长度呢?

Input


输入的第一行是一个数字k,代表输入的样例组数(k < 100)。
每组样例是一个字符串只由'(',')'这两个字符组成的字符串s(|s| < 100000)。

Output


输出s中最长的匹配子串的长度。

Sample Input

3()()((())(

Sample Output

440
代码如下:

#include <stdio.h>#include <string.h>char a[100010];int main(){int t, x, max, i, j, c;scanf( "%d", &t);getchar();while ( t--){gets( a);x = strlen( a);max = i = 0;while ( i < x){if ( a[i] == '('){c = 1;for ( j = i + 1; j < x; ++j){if ( a[j] == '(')c++;elsec--;if ( c == 0 && j - i + 1 > max)max = j - i + 1;if ( c < 0){i = j;break;}}}i++;}printf( "%d\n", max);}return 0;}

对于一个完美串,必然以(开始,所以枚举每一个(,然后确定其长度

一个for循环加一个判断语句,判断长度时,当右括号数目多与左括号时此完美串到达终点,易知,起点为i终点为j,以(i , j)这个区间内的其它任何左括号为起点终点都不可能大于j,即i - j + 1即为该区间内的最大完美子串长度。所以下一个起点应是从j往后的第一个左括号。

对于到达总串末尾时c不小于0的情况,此时会将该子串中的每一个起点枚举一遍。

0 0
原创粉丝点击