码迷,mamicode.com
首页 > 其他好文 > 详细

Sicily 1350. Piggy banks 解题报告

时间:2014-07-31 13:14:06      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   for   代码   

题目:1350. Piggy banks

 

思路:

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

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

 

代码:

 1 #include <iostream>
 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 }

 

Sicily 1350. Piggy banks 解题报告,布布扣,bubuko.com

Sicily 1350. Piggy banks 解题报告

标签:style   blog   http   color   os   io   for   代码   

原文地址:http://www.cnblogs.com/jolin123/p/3880307.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!