A:饥饿的XP
XP迷失在X星球,他醒来时已经很久很久很久没有吃过东西了。他突然发现身边有一张地图,上面有X星球上每一个食物供给点的位置。太好了,XP跳了起来。他决定先把肚子填饱再去寻找其他伙伴。现在已知XP的位置(X, Y),以及他的行走速度N(米/分钟),请问他需要多久才能到达最近的食物供给点。
输入
第一行两个正整数N和M,N为XP的行走速度,M为X星球上食物供给点的数量。
第二行两个小数X和Y,表示XP的坐标。
接下来M行,每一行包含两个小数,表示每一个供给点的坐标。
地图中的距离单位为:米。(N,M都为正整数)
-1000<=X,Y<=1000,0<M,N<=500输出
所需时间(单位为分钟,需保留两位小数)。
样例输入 Copy
1 1 0 0 1.0 0样例输出 Copy
1.00
#include <stdio.h>
#include <math.h>
double a[505];
void sort(double a[],int n) {for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (a[j] > a[j + 1]) {double t = a[j];a[j] = a[j + 1];a[j + 1] = t;}}}
}
int main() {int n, m;double x, y;while (~scanf("%d%d%lf%lf",&n,&m,&x,&y)) {double xx, yy;for (int i = 0; i < m; i++) {scanf("%lf%lf", &xx, &yy);a[i] = sqrt((x - xx) * (x - xx) + (y - yy) * (y - yy));}sort(a, m);printf("%.2lf\n", a[0] / n);}return 0;
}
B:XP的众数(题目数据有问题,1e5双重for循环能过)
XP想求一个整数数组的众数,即出现次数最多的数。但是有时候一个数组的众数不唯一,因此他希望知道数组中众数的个数。你能不能写个程序帮帮他呢?
输入
每排先输入一个n,表示该组共n个数,随后跟着n个数,表示该数组的每个元素的值
保证每个输入的值x在int范围内且(0 <=n <= 1e5)输出
每排输出一个整数,表示该组数组的众数个数
样例输入 Copy
7 1 2 3 4 2 3 4样例输出 Copy
3
#include <stdio.h>
int a[100005];
int main() {int n;while(scanf("%d",&n)!=EOF){for(int i=0;i<n;i++){scanf("%d",&a[i]);}for(int i=0;i<n-1;i++){int t=i;for(int j=i+1;j<n;j++){if(a[t]>a[j]){t=j;}}if(t!=i){int tt=a[i];a[i]=a[t];a[t]=tt;}}int m=0,s=0;for(int i=0;i<n;i++){int j=i;while(j<n-1&&a[j]==a[j+1]){j++;}if(m==j-i+1){s++;}if(m<j-i+1){m=j-i+1;s=1;}i=j;}printf("%d\n",s);}return 0;
}
C:ZWH的疑惑
有n个数字,a1,a2.....an,bi=(2^ai)%2147483648,输出所有的b的和 。
输入
首先输入t代表样例数量。
后面每两行代表每一个样例 。
第一行输入一个整数n 。
第二行输入n个整数,代表每一个ai 。
输出
所有b的和 。
数据范围 (1<=t<=500 1<=n<=500 1<=ai<=10000000000 )
样例输入 Copy
1 3 1 2 3样例输出 Copy
14
#include <stdio.h>
#include <math.h>
long long a[505];
int main() {int t, n;scanf("%d", &t);while (t--) {long long s = 0;scanf("%d", &n);for (int i = 0; i < n; i++)scanf("%lld", &a[i]);for (int i = 0; i < n; i++)if (a[i] < 31)s += (long long)pow(2, a[i]);printf("%lld\n", s);}return 0;
}
D:yangftc的时间安排
yangftc需要安排他的时间,有很多事情做,每个事情都有固定的开始和结束时间,因为yangftc每次只能做一件事情,如果有两个或者多个事情的时间重合了那么他就会说 NO,否则他就会说 YES 。
输入
第一个数字t代表样例数量,
后面t个样例,每个样例输入一个n表示事情的数量,后面n行每行两个数字l r表示这个事情的开始和结束时间;
输出
判断yangftc会说什么 YES或者 NO 。
数据范围 1<=t<=500 1<=n<=100 1<=l<=r<=100000
样例输入 Copy
2 3 1 3 4 5 6 7 2 1 3 3 4样例输出 Copy
YES NO
#include <stdio.h>
#include <math.h>
int a[100005];
int main() {int t,n;scanf("%d",&t);while(t--){scanf("%d",&n);for(int i=0;i<100005;i++){a[i]=0;}int l,r;int f=1;while(n--){scanf("%d%d",&l,&r);for(int i=l;i<=r;i++){if(a[i]){f=0;}a[i]=1;}}if(f){printf("YES\n");}else{printf("NO\n");}} return 0;
}
E:小明同学的签到题
小明同学热爱ACM,因此他每天清晨都会默念N遍HNUCM,并打开HUNCM OJ刷题,现在他要求你打印N个HNUCM字符串。
输入
有多组样例,每行输入一个正整数N(N<=100)
输出
每组数据你只需要输出N个字符串HNUCM即可,每行一个HNUCM。
每组数据后需接一行空行样例输入 Copy
4 5样例输出 Copy
HNUCM HNUCM HNUCM HNUCMHNUCM HNUCM HNUCM HNUCM HNUCM
#include <stdio.h>
#include <math.h>
int main(){int n;while(scanf("%d",&n)!=EOF){for(int i=0;i<n;i++){printf("HNUCM\n");}printf("\n");} return 0;
}
F:Yftc的宝石
Yftc来到了一个魔法之城,这个城的城主给了Yftc n片宝石碎片,每片碎片价值ai。
Yftc需要把n颗碎片合并成一颗完整的宝石。每次yftc可以选择相邻的两片合并成一片,合并后这一整块的碎片价值将变为0,并且Yftc获得的价值为两片碎片中价值较大者。
请问,将所有碎片合并成一颗宝石后,Yftc能获得的最大价值。
输入
多组输入,每组输入两行。
第一行,1个整数n(1<=n<=1000) 。
第二行n个整数,代表每片碎片价值ai(1<=ai<=10000) 。
输出
Yftc能够获得的最大价值 。
样例输入 Copy
3 1 2 3样例输出 Copy
5
#include <stdio.h>
#include <math.h>
int a[1000];
int main(){int n;while(scanf("%d",&n)!=EOF){int s=0,b=10000;for(int i=0;i<n;i++){scanf("%d",&a[i]);s+=a[i];if(b>a[i]){b=a[i];}}printf("%d\n",s-b);} return 0;
}