USACO Complete Search 1.3 namenum

题目大意:给定一段数字通过给定字符代换查看这串数字在字典内的序列,如有,输出,如无,输出NONE。

一道题搞了两天,我也是凉凉了。

通过这道题大概看了CPP有关文件操作的一部分,大致了解了

1:文件指针的定义及使用:FILE *--------定义一个指针指向文件开头(rewind()可令指针再次回到开头)

2:fopen()第一个参数是打开的文件名字,第二个参数是操作方式,常用的是”w“,”r“这种;

3:fscanf(),fprintf():第一个参数是使用的输入输出手段,也可以用stdin代换,下来就是输入输出内容

利用文件将dict.txt里的字符通通导入到一个字符串数组当中,作为之后的比较。

在这里有两种方法来完成这道题:

1:将数字代换为字母,枚举所有情况,和字典里一一做比较,如果相等输出,

      我打程序简直是漏洞百出,各种考虑不周全真是难受。

      这有几个地方要注意

      1:不止唯一解  2:所有解按字典序排布  3:注意字符的长度

      我枚举的方法是最开始把他们全部变为最后一位的字母,然后用一个数组记录数字,把这个数字从最大减到最小,想来这个到最后其实就是全排列,其实也可以用深搜做,但是我懒就想了这样的方法,最开始想的比较naive,位数只是变一位不停向前递减,后来发现这不能枚举全部。

        这个方法很容易超时,然后后来改了用二分查找就过了

2:把字典换成数字,然后比较数字,时间复杂度就会变成常数

      这方法确实蛮好的,之前看到因为已经用方法一打了很多了,到最后方法一超时才尝试方法二的,但不知道怎么回事,每次输出的时候,保存字典的数组就变成一堆数字,本来有次结果是对的,后来不知道怎么就变成那个样子了。没办法就又去改方法一,弄了两天,真是难受。

 

复习掌握内容:
二分查找

文件操作

数组操作(简化版高精度)

 

PS:不知道赶十号能做完第一章不,这个速度真是令我堪忧。。)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值