题目链接:https://acm.zzuli.edu.cn/zzuliacm/contest.php?cid=1220
“玲珑杯”郑州轻工业学院第九届ACM程序设计大赛暨河南高校邀请赛-正式赛
Problem A: tmk射气球
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 575 Solved: 106
Submit Web Board
Description
有一天TMK在做一个飞艇环游世界,突然他发现有一个气球匀速沿直线飘过,tmk想起了他飞艇上有一把弓,他打算拿弓去射气球,为了提高射击的准确性,他首先在飞艇上找到一个离气球最近的一个点,然后射击(即使气球在飞船的正上方),现在求某些时刻飞艇上的点和气球的距离最小是多少(这个最小距离我们简称为飞艇到气球的距离)。
Input
第一行一个整数T(T<=20),表示有T组测试数据
每组测试数据,有两行。
第一行有5个整数,h,x1,y1,x2,y2,其中h表示飞船的高度,飞船可抽象为一个线段,(x1,y1)(x2,y2)分别是这个线段的端点(有可能会有(x1,y1)(x2,y2)重合的情况)
第二行有6个整数,x,y,z,X,Y,Z分别表示气球的在第0秒的时候的横坐标,纵坐标,高度,一秒时间气球横坐标的变化量,一秒时间气球纵坐标的变化量,一秒时间气球高度的变化量(如果现在气球在(x0,y0,z0)下一秒坐标就为(x0+X,y0+Y,z0+Z))
第三行1个整数n,表示询问组数
接下来的n行,每行一个整数,表示询问的秒数t
题目涉及的整数除了T以外,范围均为[0,1000]
Output
每组询问输出n行,每行输出一个数,表示在t秒的时候飞艇与气球的距离最小是多少,保留两位小数
Sample Input
Sample Output
HINT
解析:三个点建一个三角形,然后如下图,一共就三种情况,a代表飞船,b、c代表飞船到气球的两条边,图1是线段右端点距离气球近(角C是钝角),输出b,图2是左端点距离近(角B是钝角),输出c,图3是输出h,下面分别模拟这三种情况就好,比较坑的是要用double,用int分开的每一个计算都要*1.0,不然WA
代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#include<map>
#include<cmath>
#include<string>
#define N 1000009
using namespace std;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 7;
int main()
{
int t;
cin >> t;
while(t--)
{
double h, x1, x2, y1, y2, x, y, z, X, Y, Z;
int n, T;
scanf("%lf%lf%lf%lf%lf", &h, &x1, &y1, &x2, &y2);
scanf("%lf%lf%lf%lf%lf%lf", &x, &y, &z, &X, &Y, &Z);
scanf("%d", &n);
while(n--)
{
scanf("%d", &T);
double xx, yy, zz;
xx = x + X*T; yy = y + Y*T; zz = z + Z*T;
if(abs(x1-x2)==0&&abs(y1-y2)==0)
{
printf("%.2f\n", sqrt(1.0*(x1-xx)*(x1-xx) + (y1-yy)*(y1-yy) + (h-zz)*(h-zz)));
continue;
}
double p, a, b, c;
a = sqrt(1.0*(x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
b = sqrt(1.0*(x1-xx)*(x1-xx) + (y1-yy)*(y1-yy) + (h-zz)*(h-zz));
c = sqrt(1.0*(xx-x2)*(xx-x2) + (yy-y2)*(yy-y2) + (zz-h)*(zz-h));
p = (a + b + c) / 2.0;
double s = sqrt(p*(p-a)*(p-b)*(p-c));
double C = a*a+b*b-c*c;
if(C < 0)
{
printf("%.2f\n", b);
continue;
}
double B = a*a+c*c-b*b;
if(B < 0)
{
printf("%.2f\n", c);
continue;
}
printf("%.2f\n", s*2.0/a);
}
}
return 0;
}
Problem B: base64解密
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 348 Solved: 153
Submit Web Board
Description
码值 |
字符 |
码值 |
字符 |
码值 |
字符 |
码值 |
字符 |
码值 |
字符 |
码值 |
字符 |
码值 |
字符 |
码值 |
字符 |
0 |
A |
8 |
I |
16 |
Q |
24 |
Y |
32 |
g |
40 |
o |
48 |
w |
56 |
4 |
1 |
B |
9 |
J |
17 |
R |
25 |
Z |
33 |
h |
41 |
p |
49 |
x |
57 |
5 |
2 |
C |
10 |
K |
18 |
S |
26 |
a |
34 |
i |
42 |
q |
50 |
y |
58 |
6 |