河南省第一届ACM程序设计大赛题解

  • 2019 年 11 月 28 日
  • 筆記

最近在筹备省赛,so,拿以前的题目做一做.

【试题一】

灾区已经非常困难,灾民需要帐篷、衣物、食品和血浆。可通往灾区的道路到处都是塌方,70%以上的路面损坏,桥梁全部被毁。中国空军立即启动应急预案,展开史上最大强度非作战空运行动,准备向灾区空投急需物资。由于余震不断,天气恶劣,怎样知道空投的物资是否落在某灾区的区域内?

经过空中观测,多数灾区为一圆形,空投的物资落在P(Xj,Yj)点。你能否给出一个正确判断?

标准输入

第1行: N  M             (N为灾区数,  M 为空投的物资数)

接下有N行:Xi0  Yi0   Ri     (Xi0 ,Yi0)为圆心坐标, Ri为圆半径 i=1, 2, …., N

接下有M行:Xj  Yij          Xj ,Yj)为空投物资的坐标 j=1, 2, …., M )

标准输出

输出有M行,每一行输出 YES        (若物资落在某个圆上或圆内,输出YES

或  NO          否则输出NO  )

约束条件

  • 1 ≤ N ≤ 3     2 ≤ M ≤ 10
  • Ri 是一个正整数    Ri <=50      i=1, 2, …., N
  • 所有的圆心坐标和物资的坐标均为整数  范围均在[-100,100]内
  • 时间限制: 1000MS

【 样  例 】

标准输入

标准输出

2  3 0 0 20 -70 30 50 10 10 -30 60 30 30

YES YES NO

#include "stdio.h"  #include <math.h>  int main(int argc, char const *argv[]) {      int n,m;      while (scanf("%d%d",&n,&m )!=EOF) {          int i,j,k;          double a[10][10],b1,b2;          for(i = 0 ; i < n; i++)          {              scanf("%lf%lf%lf",&a[i][0],&a[i][1],&a[i][2] );          }          for(i = 0 ; i < m; i++)          {              scanf("%lf%lf",&b1,&b2);              for(j = 0 ; j < n ; j++)              {                  double temp=sqrt((b1-a[j][0])*(b1-a[j][0])+(b2-a[j][1])*(b2-a[j][1]));                  if(temp<=a[j][2])                  {                      printf("YESn");                      break;                  }              }              if(j==n)                  printf("NOn");          }      }      return 0;  }

【试题三】

密码破译 

某组织欲破获一个外星人的密码,密码由一定长度的字串组成。此组织拥有一些破译此密码的长度不同的钥匙,若两个钥匙的长度之和恰好为此密码的长度,则此密码被成功破译。现在就请你编程找出能破译此密码的两个钥匙。

标准输入

第一行: N                  N为钥匙的个数(1<=N<=1000)

第二行: L                  L为密码的长度

以下有N行: Ai                每一行是一把钥匙的长度  i=1,2,……,N

标准输出

若无法找到破译此密码的钥匙,则输出0

若找到两把破译的钥匙,则输出文件有两行,分别为两把钥匙的编号,按从小到大输出。若有多种破译方案,则只输出包含起始编号最小的一组即可。

[【约束条件

(1)1<= N,L,Ai <=1000    (  i=1, 2, ….., N )

(2)时间限制: 1000MS

【 样  例 】

标准输入

标准输出

10 80 27 9 4 73 23 68 12 64 92 16

6 7

#include "stdio.h"  int main(int argc, char const *argv[]) {      int n;      while (scanf("%d",&n )!=EOF) {          int L,i,j,k,a[1001],t=0;          scanf("%d",&L );          for (i = 0; i < n; i++) {              scanf("%d",&a[i]);          }          for (i = 0; i < n; i++) {              int temp = L-a[i];              for (j = 0; j < n; j++) {                  if(temp==a[j])                  {                      printf("%dnn%dn",i+1,j+1);                      t=1;                      break;                  }              }              if(t==1)                  break;          }      }      return 0;  }

原创文章,转载请注明: 转载自URl-team

本文链接地址: 河南省第一届ACM程序设计大赛题解

No related posts.