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代码:

//出了点问题

 

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