9502 ARDF

时间限制:1000MS  内存限制:65535K 提交次数:0 通过次数:0

题型: 编程题   语言: 无限制

Description

    ARDF,全称无线电测向。无线电测向运动是竞技体育项目之一,也是无线电活动的主要内容。它类似于众所周知的捉迷藏游戏,但它是寻找能发射无线电波的小型信号源(即发射机), 是无线电捉迷藏,是现代无线电通讯技术与传统捉迷藏游戏的结合。大致过程是:在旷野、山丘的丛林或近郊、公园等优美的自然环境中,事先隐藏好数部信号源,定时发出规定的电报信号。 参加者手持无线电测向机,测出隐蔽电台的所在方向,采用徒步方式,奔跑一定距离,迅速、准确地逐个寻找出这些信号源。以在规定时间内,找满指定台数、实用时间少者为优胜。 通常, 我们把实现巧妙隐藏起来的信号源比喻成狡猾的狐狸,故此项运动又称无线电“猎狐”或抓“狐狸”。摩斯密码是一种时通时断的信号代码,这种信号代码通过不同的排列顺序来表达不同的英文字母、数字和标点符号等。摩斯密码中,-表示长,.表示短。 摩斯密码表示两个字元是采用直接相连法,即直接将第二个字元的摩斯密码接到第一个字元摩斯密码的后面。一连串的摩斯密码连成一起,就是要发送的信号。无线电测向分为2米波段和80米波段,区别在于电波的波长不同,接收用的机器也不同。 而信号源发出的信号为摩斯密码,测向运动两个波段对应的摩斯密码如下:号码 2米波段    80米波段0      -----   -----1      .----   -- ---.2    ..---   -- ---..3       ...--   -- ---...4      ....-   -- ---....5     .....   -- ---.....6    -....   -....7      --...   --...8      ---..   ---..9      ----.   ----.BM是测向新手,对于辨别信号,信号源定位等方法都不太熟悉。现在,又到训练时间了。教练让BM拿了一部测向机在听信号,以训练辨别信号的能力。 不过,变态的教练不仅要BM分辨每个信号源对应是什么数字,还问这两个数字之和对应的摩斯密码是什么!但是,BM却不知道这是哪个波段的信号,又还没有记熟每个号码对应的摩斯密码,咋办? 答不出可是要罚跑华农一圈啊!!!Arokenda在训练过程中不忍心看着BM就这样受罚,就帮了BM一把,给了BM一个摩斯密码对应表和破译多位数的方法,说将两个数变成整数再算。 但是听到某一信号时,BM听了很久还没听完。惨了!数位太多,int存不下,这次又咋办?Arokenda说:“还不简单,用long long不就行了吗?long long可以表示-2^63至2^63-1之间的整数,而且又没有double只保留16位精度的问题。就像这样:#include<stdio.h>int main(){long long a;scanf(“%lld”,&a);printf(“%lld”,a);return 0;}”就在此时,教练发现他们俩的作弊行为!不解释,罚跑运动场3圈!@#$%^&*训练还得继续,面对这魔鬼式训练,BM忍不住向大家求救!你能帮一下BM吗?

Input

    输入一个整数T(T<=20),表示教练员有几次测试。接下来3行,第一行为一个整数W,表示该信号源是属于哪个波段,2或80。第二、三行为一串摩斯密码,长度不超过90,表示BM听到的两个信号源对应的信号。

Output

    每组数据输出一行,输出两个信号源对应数字之和在相应波段下的摩斯密码。

Sample Input

3
2
.----
-....
80
-- ---.
-- ---...
80
-- ---....
---..

Sample Output

--...
-- ---....
-- ---.-- ---..

Hint

    1、VC下long long的数据类型会编译不通过,此时将数据类型写成__int64,scanf和printf要使用%I64d代替%lld。2、除了本题之外,其余题目也许也要用到long long,请根据需要自行考虑

Source

BM

Provider

a470086609

#include<stdio.h>
#include<string.h>typedef struct {int flag;int len;char chunk[12];
}present[10];present sale2, sale80;void Traverse()
{int i;for(i=0; i<10; ++i) {sale2[i].flag = i; sale2[i].len = 5;}strcpy(sale2[0].chunk , "-----");    strcpy(sale2[1].chunk , ".----");strcpy(sale2[2].chunk , "..---");    strcpy(sale2[3].chunk , "...--");strcpy(sale2[4].chunk , "....-");    strcpy(sale2[5].chunk , ".....");strcpy(sale2[6].chunk , "-....");    strcpy(sale2[7].chunk , "--...");strcpy(sale2[8].chunk , "---..");    strcpy(sale2[9].chunk , "----.");sale80[0].flag = 5; strcpy(sale80[0].chunk , "-- ---....."); sale80[0].len = 11;sale80[1].flag = 4; strcpy(sale80[1].chunk , "-- ---...."); sale80[1].len = 10;sale80[2].flag = 3; strcpy(sale80[2].chunk , "-- ---..."); sale80[2].len = 9;sale80[3].flag = 2; strcpy(sale80[3].chunk , "-- ---.."); sale80[3].len = 8;sale80[4].flag = 1; strcpy(sale80[4].chunk , "-- ---."); sale80[4].len = 7;sale80[5].flag = 0; strcpy(sale80[5].chunk , "-----"); sale80[5].len = 5;sale80[6].flag = 6; strcpy(sale80[6].chunk , "-...."); sale80[6].len = 5;sale80[7].flag = 7; strcpy(sale80[7].chunk , "--..."); sale80[7].len = 5;sale80[8].flag = 8; strcpy(sale80[8].chunk , "---.."); sale80[8].len = 5;sale80[9].flag = 9; strcpy(sale80[9].chunk , "----."); sale80[9].len = 5;return;
}int main()
{int a[20], b[20], sum[20];int sel, i, j, T, s1len, s2len, s1cnt, s2cnt, temp, e, len, flag;char s1[100], s2[100], *str;Traverse();scanf("%d", &T);while(T--){memset(a, 0, sizeof(a));memset(b, 0, sizeof(b));memset(sum, 0, sizeof(sum));memset(s1, 0, sizeof(s1));memset(s2, 0, sizeof(s2));s2len = s1len = s1cnt = s2cnt = flag = 0;scanf("%d", &sel);getchar();  //这里有一个回车,而fgets会吸收回车 //scanf("%s", s1);fgets(s1, 100, stdin);fgets(s2, 100, stdin);//scanf("%s", s2);s1len = strlen(s1)-1, s2len = strlen(s2)-1;if(sel == 2){for(i=0, str=s1; i<s1len; ){for(j=0; j<10; ++j){if(str == strstr(str, sale2[j].chunk)){i += sale2[j].len;a[s1cnt++] = sale2[j].flag;str = s1+i;break;}}}for(i=0, str=s2; i<s2len; ){for(j=0; j<10; ++j){if(str == strstr(str, sale2[j].chunk)){i += sale2[j].len;b[s2cnt++] = sale2[j].flag;str = s2+i;break;}}}}else {for(i=0, str=s1; i<s1len; ){for(j=0; j<10; ++j){if(str == strstr(str, sale80[j].chunk)){i += sale80[j].len;a[s1cnt++] = sale80[j].flag;str = s1+i;break;}}}for(i=0,str=s2; i<s2len; ){for(j=0; j<10; ++j){if(str == strstr(str, sale80[j].chunk)){i += sale80[j].len;b[s2cnt++] = sale80[j].flag;str = s2+i;break;}}}}for(i=0, j=s1cnt-1; i<j; ++i, --j) {temp = a[i]; a[i] = a[j]; a[j] = temp;} for(i=0, j=s2cnt-1; i<j; ++i, --j) {temp = b[i]; b[i] = b[j]; b[j] = temp;} //    for(i=0; i<s1cnt; ++i) {printf("a[%d] = %d\n", i, a[i]);} //    for(i=0; i<s2cnt; ++i) {printf("b[%d] = %d\n", i, b[i]);}
        len = s1cnt<s2cnt ? s1cnt:s2cnt;for(i=0, e=0; i<len; ++i){temp = (e + a[i] + b[i]);sum[i] = temp%10;e = temp/10;}if(i < s1cnt)while(i != s1cnt){temp = e + a[i] + sum[i];sum[i] = temp%10;e = temp/10;i++;}else while(i != s2cnt){temp = e + b[i] + sum[i];sum[i] = temp%10;e = temp/10;i++;}for(; i<20 && e; ++i) {temp = e + sum[i];sum[i] = temp%10;e = temp/10;}for(i=20-1; i>0 && !sum[i]; --i);for(; i>=0; --i) {//    printf("%d", sum[i]);if(sel == 2) printf("%s", sale2[sum[i]].chunk);else {if(sum[i]>=6)printf("%s", sale80[sum[i]].chunk);else printf("%s", sale80[5 - sum[i]].chunk);}}printf("\n"); }return 0;
}

解题报告:

将摩斯密码中的字元转成数字进行运算,然后再进行转换输出,在80米波段中要注意比较的先后顺序!代码有点长,AC后必须看标程才行。

不知为啥,还是用上了高精度加法,题目明明提示了用long long,再结合strstr函数,结果就出来了。

花了点时间,在考虑当中为什么会出现这种情况,思路清晰,但实现确是另外一回事,!!!!!!!!

===========================================================================

《算法竞赛入门经典》(刘汝佳)里有这样一段话:

在实际编程中,我们经常先编写一个具备主要功能的程序,再加以完善,我们甚至可以先写一个只有输入输出功能的“骨架”,但要确保它

正确,这样,每次只添加一点点小功能,而且写一点就测试一点,和一次写完整个程序相比,更加不容易出错。这种方法称为:迭代式开发!!

一开始在初始化结构体时,曾因直接赋值导致错误,然后不得不进行大篇幅更改,类似的代码更加如此,比如下面的两个if-else,因为一开始

代码复制更改,结构基本一致,但后来DEBUDGE的时候发现出了点差错,同样不得不进行大篇幅更改,这样浪费了不少不必要的时间。这点尤为重要!

还有就是思维必须要再严谨一点,不然到最后还是会一摊BUG,难以收拾!

Classic Code

#include<stdio.h>
#include<string.h>
int main()
{int t,kind,i,q,p,k,an,j,ju,y;long long sum,e;char a[2][100],b[20][15];scanf("%d",&t);for(i=0;i<t;i++){sum=0;scanf("%d",&kind);getchar();gets(a[0]);gets(a[1]);for(q=0;q<2;q++){e=1;for(p=strlen(a[q])-1;p>=0;){k=0;if(kind==2){for(j=p;j>p-5;j--)if(a[q][j]=='.') k++;p=j;if(k&&a[q][j+1]=='-')k=10-k;}else{   ju=0;for(j=p;j>p-9&&j>=0;j--){if(a[q][j]==' ') {ju=1;break;}if(a[q][j]=='.'&&j>p-5)k++;}if(ju)p=j-3;else{p=p-5;if(k)k=10-k;}}sum=sum+k*e;e=e*10;}}for(y=0;sum;y++){an=sum%10;if(an>5||an==0)switch(an){case 0:strcpy(b[y],"-----");break;case 6:strcpy(b[y],"-....");break;case 7:strcpy(b[y],"--...");break;case 8:strcpy(b[y],"---..");break;case 9:strcpy(b[y],"----.");break;default:break;}else{if(kind==2){switch(an){case 1:strcpy(b[y],".----");break;case 2:strcpy(b[y],"..---");break;case 3:strcpy(b[y],"...--");break;case 4:strcpy(b[y],"....-");break;case 5:strcpy(b[y],".....");break;default:break;}}else{switch(an){case 1:strcpy(b[y],"-- ---.");break;case 2:strcpy(b[y],"-- ---..");break;case 3:strcpy(b[y],"-- ---...");break;case 4:strcpy(b[y],"-- ---....");break;case 5:strcpy(b[y],"-- ---.....");break;default:break;}}}sum=sum/10;}for(y--;y>=0;y--)printf("%s",b[y]);printf("\n");}return 0;
}

转载于:https://www.cnblogs.com/liaoguifa/archive/2012/11/22/2782517.html

SCAU 9502 ARDF相关推荐

  1. scau 9502 ARDF一个变量的问题

    哨兵变量flag不小心没 设置成0..所以一直WA 9502 ARDF 时间限制:1000MS  内存限制:65535K提交次数:0 通过次数:0 题型: 编程题   语言: G++;GCC Desc ...

  2. SCAU 18935 贪吃的小Q

    SCAU 18935 贪吃的小Q 思路:从别人那发现的,就是从最后一天开始按照吃的数量加倍的方法,找到最后一天吃的最小数目,然后减去这一天的数目.将剩余的问题化作n-1天情况下的同类问题,循环n次即可 ...

  3. SCAU高级语言程序设计--实验10 指针与结构体(1)

    SCAU高级语言程序设计--实验10 指针与结构体(1) 一.堂上限时习题 1.交换两数,由大到小输出 题目:下面程序,交换两数,使两数由大到小输出,请填空 #include "stdio. ...

  4. scau 2021春数据结构试题

    一.选择题(本大题共 10 小题,每小题2分,共20分) 1.下列查找方法中,(    )适用于查找有序单链表. A.分块查找;    B.哈希查找;    C.顺序查找;     D.二分查找; 线 ...

  5. SCAU JAVA期末复习

    第二章 JAVA语言基础与流程控制 1.JAVA语言标识符的规则 ①标识符由字母.数字.下划线和美元符号组成的字符串 ②第一个字符必须为:字母.下划线或$ ③标识符不能是关键字 ④标识符不能是true ...

  6. SCAU软件工程基础

    软件工程基础复习笔记 ==**注意:标注(*)的题目为2022年SCAU软件工程基础考试题,仅供参考**== 一.名词解释: 1.软件 (*)2.软件工程 3.软件危机 (*)4.软件需求 5.改善型 ...

  7. SCAU软件工程基础复习笔记

    前言:本笔记基于某SCAU师兄笔记完善,仅供学习参考,祝大家考试顺利! 原博客:(29条消息) SCAU软件工程期末复习_Throb001的博客-CSDN博客https://blog.csdn.net ...

  8. 解决报错:WebSocket connection to ‘ws://124.207.120.104:9502/‘ failed: Error in connection establish

    使用swoole连接WebSocket时报错: WebSocket connection to 'ws://124.207.120.104:9502/' failed: Error in connec ...

  9. SCAU 8631 盒子上的蚂蚁

    8631 盒子上的蚂蚁 时间限制:500MS  内存限制:1000K 提交次数:0 通过次数:0 题型: 编程题   语言: 无限制 Description 2009 年国际ACM 程序设计大赛在中国 ...

最新文章

  1. 测试:abstract class不允许出现在Angular依赖注入框架的providers区域内
  2. 使用maven构建dubbo服务的可执行jar包
  3. 循环序列模型 —— 1.11 双向神经网络
  4. 《天天数学》连载19:一月十九日
  5. 音视频开发(42)---H.264 SVC 简介
  6. html5选择试题及答案,全套html5面试题大全带答案
  7. CentOS操作系统keepalived安装步骤
  8. python第三库安装方法记录
  9. 未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
  10. f28335的c语言结构体,TMS320F28335程序SVPWM源程序
  11. 信用卡葵花宝典 阅读笔记(二)
  12. OLS最小二乘法回归模型
  13. win7 win10双系统开机系统引导
  14. Mac配置ll的查看命令
  15. 【微信小程序开发(云壁纸小程序教程)】
  16. 复旦大学硕士盲审 计算机学院,上海市硕士论文盲审 复旦大学论文抽检、盲审工作的通知...
  17. 淘宝足迹新玩法,如何通过足迹增加商品曝光量,打标后足迹不出解决方法,淘宝详情页的下拉出现足迹怎么实现的
  18. 关于小红书的小程序不同数量的轮播图,展示不一样的轮播指示点的实现
  19. 基于遥感影像的道路提取论文、开源代码和数据集汇总
  20. Python Environment Interpreter

热门文章

  1. 《linux就该这么学——笔记》第7章 使用RAID与LVM磁盘阵列技术
  2. Oracle APEX 系列文章2:在阿里云上打造属于你自己的APEX完整开发环境 (准备工作)
  3. swal confirm确认框
  4. matlab简单拟合,polyfit和curve fit tool(鱼的质量与身长和腰围的关系)
  5. 《Linux内核分析与实现》 第五周 读书笔记
  6. 【优化求解】粒子群算法求解仓库成本控制优化问题【含Matlab源码 1577期】
  7. android wear 助手,Android Wear 2.0正式发布:将谷歌助手放进你的手表
  8. 读书笔记—《销售铁军》随记5
  9. java语言计算圆周率_Java语言简单计算圆周率完整示例
  10. 咖啡汪日志——JAVA导出pdf文件加水印 文字+图片、文字