博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Sicily 1350. Piggy banks 解题报告
阅读量:6038 次
发布时间:2019-06-20

本文共 1183 字,大约阅读时间需要 3 分钟。

题目:

 

思路:

  首先把每个钥匙的位置存进key_positions[]中,然后从第一个bank开始,用不同的color给它们分组。比如第一个bank的钥匙在第二个bank中,那么可以直接先开第二个,第二个钥匙在第四个bank中,同样可以先开第四个,以此类推,直到某个钥匙出现在前面的同一组的某个bank中则需要打破一个。visited数组初始化为0,然后访问过后标记为颜色的编号。第21行visited[cur] == color只有找到颜色相同即在同一组的才需要打破多一个,因为如果钥匙在另一个组中,那么解决那个组之后自然可以拿到这个组的钥匙。

  坑爹的地方是题目只有一组输入,但是测试的时候必须用while(cin >> n)才能AC

 

代码:

1 #include 
2 using namespace std; 3 4 const int MAX = 1000001; 5 int visited[MAX], key_positions[MAX]; 6 7 int main() { 8 int n; 9 while (cin >> n) {10 int result = 0, color = 1;11 for (int i = 1; i <= n; ++i) {12 cin >> key_positions[i];13 visited[i] = 0;14 }15 for (int i = 1; i <= n; ++i) {16 if (visited[i] == 0) {17 int cur = i;18 while (visited[cur] == 0) {19 visited[cur] = color;20 cur = key_positions[cur];21 if (visited[cur] == color)22 result++;23 }24 color++;25 }26 }27 cout << result << endl;28 }29 return 0;30 }

 

转载于:https://www.cnblogs.com/jolin123/p/3880307.html

你可能感兴趣的文章
《量化金融R语言初级教程》一2.5 协方差矩阵中的噪声
查看>>
mysql到elasticsearch数据迁移踩坑实践-Ali0th
查看>>
beetl 和 shrio 结合
查看>>
相对/绝对路径,cd命令,mkdir/rmdir命令,rm命令
查看>>
tomcat中web.xml各配置项的意义
查看>>
Nodejs学习笔记(二):《node.js开发指南》代码中需要注意的几点
查看>>
Ztree异步加载自动展开节点
查看>>
反射操作公共成员变量
查看>>
Android热修复升级探索——代码修复冷启动方案
查看>>
学校宿舍的深夜之思考
查看>>
VB.NET 生成DBF文件
查看>>
编译安装nginx 1.9.15
查看>>
我的友情链接
查看>>
新的开始~~~
查看>>
字符串的扩展
查看>>
存储过程中调用webservice
查看>>
神奇语言 python 初识函数
查看>>
Windows安装Composer出现【Composer Security Warning】警告
查看>>
四 指针与数组 五 函数
查看>>
硬盘空间满了
查看>>