ACM必做50题的解题5.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ACM必做50题的解题5

POJ 1029 False coin Slyar:又是假币判断问题,跟POJ1013类似,不过这个题用1013那个算法WA了...后来换了种枚举的算法才过...思路就是假币应该在每个不等式中都出现,最后只要看哪个硬币出现的次数和不等式出现的次数相同,如果这个硬币唯一,那它就是确认的假币。#include iostream#include string using namespace std; const int MAX = 1001; int main(){ int n, k, p, total = 0; char sign; /* 记录原始数据 */ int t[MAX] = {0}; /* 标记硬币真假 */ int r[MAX] = {0}; /* 记录硬币重量 */ int w[MAX] = {0}; cin n k; while (k--) { /* 读入原始数据 */ cin p; for (int i = 0; i 2 * p; i++) { cin t[i]; } cin sign; /* 标记肯定为真的硬币 */ if (sign == =) { for (int i = 0; i 2 * p; i++) { r[t[i]] = 1; } } /* 左轻右重 */ else if (sign == ) { total++; for (int i = 0; i p; i++) { w[t[i]]--; } for (int i = p; i 2 * p; i++) { w[t[i]]++; } } /* 左重右轻 */ else if (sign == ) { total++; for (int i = 0; i p; i++) { w[t[i]]++; } for (int i = p; i 2 * p; i++) { w[t[i]]--; } } } /* 假币在不等式中每次都应该出现 */ int count = 0, pos = 0; for (int i = 1; i = n; i++) { if (r[i]) { continue; } /* 找出每次都出现的假币 */ if (w[i] == total || w[i] == - total) { count++; pos = i; } } poj 1013 Counterfeit Dollar关于称硬币的问题: 此题中赛利已经设计了正确的称量方案,保证从三组称量数据中能得到唯一的答案。答案可以用两个变量表示:x?假币的标号、w?假币是比真币轻还是比真币重。x 共有12 种猜测;w 有2 种猜测。根据赛利设计的称量方案,(x,w )的24 种猜测中,只有唯一的猜测与三组称量数据都不矛盾。因此,如果猜测(x,w )满足下列条件,这个猜测就是要找的答案:? 在称量结果为even 的天平两边,没有出现x ;? 如果w 表示假币比真币轻,则在称量结果为up 的天平右边一定出现x、在称量结果为down 的天平左边一定出现x? 如果w 表示假币比真币重,则在称量结果为up 的天平左边一定出现x、在称量结果为down 的天平右边一定出现x具体实现时,要注意两点:1) 选择合适的算法对于每一枚硬币x 逐个试探:? x 比真币轻的猜测是否成立?猜测成立则进行输出。? x 比真币重的猜测是否成立?猜测成立则进行输出。2) 选择合适的数据结构以字符串数组存储称量的结果。每次称量时,天平左右最多有6 枚硬币。因此,字符串的长度需要为7,最后一位存储字符串的结束符’\0’,便于程序代码中使用字符串操作函数。char left[3][7], right[3][7], result[3][7];#include stdio.h #include string.h char left[3][7], right[3][7], result[3][5]; int islight( char x ) { int i; for ( i = 1; i = 3; i++ ) switch( result[i][0] ) { case u: if( strchr(right[i], x) == NULL ) return 0; break; case e: if(strchr(right[i], x) != NULL || strchr(left[i], x) != NULL) return 0; break; case d: if(strchr(left[i], x) == NULL) return 0; break; } return 1; } int isheavy( char x ){ int i; for ( i = 1; i =3; i++

文档评论(0)

mliaojfangwi + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档