2019百度之星初賽1 (A)

目錄

A.Polynomial

Problem Description

Input

Output

Sample Input

Sample Output

題意分析:

1.題是什麼

2.思路

AC代碼:

C.Mindis

Problem Description

Input

Output

Sample Input

Sample Output

題意分析:

1.題是什麼?

2.思路

AC代碼:


 

 

A.Polynomial

Accepts: 2212

Submissions: 5283

Time Limit: 2000/1000 MS (Java/Others)

Memory Limit: 32768/32768 K (Java/Others)

Problem Description

度度熊最近學習了多項式和極限的概念。 現在他有兩個多項式 f(x) 和 g(x),他想知道當 x 趨近無限大的時候,f(x)/g(x) 收斂於多少。

Input

第一行一個整數 T (1≤T≤100) 表示數據組數。 對於每組數據,第一行一個整數 n (1≤n≤1,000),n−1表示多項式 f和 g 可能的最高項的次數(最高項係數不一定非0)。 接下來一行 n 個數表示多項式 f,第 i 個整數 fi (0≤fi≤1,000,000)表示次數爲 i−1次的項的係數。 接下來一行 n 個數表示多項式 g,第 i 個整數 gi (0≤gi≤1,000,000)表示次數爲 i−1 次的項的係數。 數據保證多項式 f 和 g 的係數中至少有一項非0。

Output

對於每組數據,輸出一個最簡分數 a/b(a 和 b 的最大公約數爲1)表示答案。 如果不收斂,輸出 1/0。

Sample Input

3
2
0 2
1 0
2
1 0
0 2
3
2 4 0
1 2 0

Sample Output

1/0
0/1
2/1

樣例描述
這些多項式分別爲
f(x)=2xf(x) = 2xf(x)=2x
g(x)=1g(x) = 1g(x)=1
f(x)=1f(x) = 1f(x)=1
g(x)=2xg(x) = 2xg(x)=2x
f(x)=4x+2f(x) = 4x + 2f(x)=4x+2
g(x)=2x+1g(x) = 2x + 1g(x)=2x+1

題意分析:

1.題是什麼

    每組樣例給你一個整數n,接下來是兩排n個整數,表示兩個n-1次多項式f和g,求f/g的極限值

2.思路

    我們知道多項式f(x)/g(x)極限只有三種情況,根據f與g的最高次項分爲f比g高階時爲無窮大,f比g低階時爲無窮小和同階時爲最高次項係數比,由題意高輸出1/0,低輸出0/1,同階輸出最高次項的係數比,同時根據題意通過gcd算法進行最簡分數的化簡即可。

AC代碼:

#include <stdio.h>
const int maxn=1e3+3;
int gcd(int a,int b){
	if(b==0) return a;
	return gcd(b,a%b);
}
int f[maxn],g[maxn];
void solve(){
	int t;
	scanf("%d",&t);
	while(t--){
		int n;
		scanf("%d",&n);
		for(int i=0;i<n;i++) scanf("%d",&f[i]);
		for(int i=0;i<n;i++) scanf("%d",&g[i]);
		int f_zpre=0,g_zpre=0;
		for(int i=n-1;i>=0;i--){
			if(f[i]) break;
			f_zpre++;
		}
		for(int i=n-1;i>=0;i--){
			if(g[i]) break;
			g_zpre++;
		}
		if(f_zpre>g_zpre){
			printf("0/1\n");
		}
		else if(f_zpre<g_zpre){
			printf("1/0\n");
		}
		else{
			int temp=gcd(f[n-1-f_zpre],g[n-1-g_zpre]);
			printf("%d/%d\n",f[n-1-f_zpre]/temp,g[n-1-g_zpre]/temp);
		}
	}
}

int main(){
	solve();
	return 0;
}

 

C.Mindis

Accepts: 117

Submissions: 791

Time Limit: 4000/2000 MS (Java/Others)

Memory Limit: 131072/131072 K (Java/Others)

Problem Description

平面上有 n 個矩形,矩形的邊平行於座標軸,現在度度熊需要操控一名角色從 A 點走到 B 點。 該角色可以上下左右移動,在恰被 k 個矩形覆蓋的區域,該角色的速率爲 k+1 個距離/秒(矩形覆蓋區域包括邊界)。

請求出 A 移動到 B 最快需要多少秒。

Input

第一行一個整數 T (1≤T≤5)表示數據組數。 對於每組數據,第一行輸入一個整數 n (1≤n≤200)。 接下來 n 行每行 4 個整數 x1,y1,x2,y2 (0≤x1<x2≤1000000000,0≤y1<y2≤1000000000),分別表示矩形的左下角和右上角的座標。 最後一行四個整數 xa,ya,xb,yb ((0≤xa,xb,ya,yb≤1000000000) 代表 A 和 B 的座標。

Output

對於每組數據,輸出一個小數表示答案。答案保留 5 位小數。

Sample Input

1
1
5 5 6 6
7 7 8 8

Sample Output

2.00000

題意分析:

1.題是什麼?

    在1e9*1e9的大地圖上有n個矩形區域,現在我們要求角色從a點走到b點的最短用時,角色在某區域內的速度是覆蓋此位置的矩形數目k+1個距離每秒。

2.思路

    首先根據所有矩形以及起點末點以及邊界,對整個地圖進行離散化,然後使用 區間合併思路 分別對x方向和y方向的矩形進行合併,這樣我們就能得到離散化後的地圖中每個點被幾個區間所覆蓋了,之後在離散化後的地圖上進行bfs尋找前往b的最短用時,進行每一步的用時計算時根據離散之前的兩點距離dis除以k+1即可。

AC代碼:

//出了點問題

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章