USACO Section1.3 Combination Lock 解题报告
combo解题报告 —— icedream61 博客园(转载请注明出处)
------------------------------------------------------------------------------------------------------------------------------------------------
【题目】
一个三位密码锁,每位可能取值1~N。有两个解锁密码,都会给出。
若尝试的密码与某个解锁密码相等或相近(每位值都至多差2),均可解开锁。
例如:(1,2,3)(4,5,6)是两个解锁密码,那么(1,N,5)(2,4,8)均可解锁,而(1,5,6)则不可。
【数据范围】
1<=N<=100
【输入样例】
50
1 2 3
5 6 7
【输出样例】
249
------------------------------------------------------------------------------------------------------------------------------------------------
【分析】
直接枚举。
需要注意,两个密码相等的判断容易出错(需要%N的情况下,下标并非从0开始;差2及以内均相等,此差2可能与%N同时发生)。
------------------------------------------------------------------------------------------------------------------------------------------------
【总结】
一遍AC。
顺带用了下重载运算符与类内置函数的语法,有个小问题存疑:如果我把代码中add和inRange两个函数放到Key类里面,那么operator==里面便无法调用这两个函数。如有人懂,望不吝赐教~
------------------------------------------------------------------------------------------------------------------------------------------------
【代码】
1 /* 2 ID: icedrea1 3 PROB: combo 4 LANG: C++ 5 */ 6 7 #include <iostream> 8 #include <fstream> 9 using namespace std; 10 11 int N; 12 13 int add(int x,int y) { return (x+y-1+N)%N+1; } 14 bool inRange(int x,int y) { return x==y || add(x,1)==y || add(x,2)==y || add(x,-1)==y || add(x,-2)==y; } 15 16 struct Key 17 { 18 int x,y,z; 19 friend bool operator==(Key a,Key b) { return inRange(a.x,b.x) && inRange(a.y,b.y) && inRange(a.z,b.z); } 20 }; 21 22 Key A,B; 23 24 int main() 25 { 26 ifstream in("combo.in"); 27 ofstream out("combo.out"); 28 29 in>>N; 30 in>>A.x>>A.y>>A.z; 31 in>>B.x>>B.y>>B.z; 32 33 int s=0; 34 Key t; 35 for(t.x=1;t.x<=N;++t.x) 36 for(t.y=1;t.y<=N;++t.y) 37 for(t.z=1;t.z<=N;++t.z) s+=(t==A||t==B); 38 out<<s<<endl; 39 40 in.close(); 41 out.close(); 42 return 0; 43 }
posted on 2015-03-09 12:38 IceDream61 阅读(303) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端