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
HNUCM

HNUCM
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;
}

 

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部