2016鄭州大學ACM/ICPC訓練賽 Round4

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 1
10 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

4
4
0
代碼如下:

#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++;
					else
						c--;
					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的情況,此時會將該子串中的每一個起點枚舉一遍。

發佈了40 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章