河南省第一届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.