首页 > 其他 > 详细

第四次训练

时间:2021-02-04 20:47:29      阅读:35      评论:0      收藏:0      [点我收藏+]

CodeForces - 796B  div-2

题意:桌子上有n个杯子(编号1~n),m个洞,移动k次杯子(这里是直接交换两个杯子的位置,因此不需要考虑杯子之间的杯子),刚开始骨头在一号杯子里面,求经过k次移动后,骨头的最终位置

思路:开一个状态数组,把有洞的位置状态定义为true,每次输入两个要交换的杯子,看两个位置的状态

1.当装有骨头的杯子移动到一个洞的上方时,骨头掉下来了,因此,之后的移动都不起作用,此时是答案

2.注意当1的位置有洞,即一开始就掉下去的情况

 

最后一个循环直接搞定!

 1 #include <iostream>
 2 #include <cstring>
 3 #include <algorithm>
 4 
 5 using namespace std;
 6 
 7 int h;
 8 bool st[1000020];
 9 int x1,x2;
10 int main()
11 {
12     int n ,m ,k;
13     int res = 1;
14     cin >> n >> m >> k;
15     for(int i = 1 ;i <= m ; i ++ ) cin >> h , st[h] = true;
16     
17     for(int i = 1 ; i <= k ; i ++ )//一个循环浓缩了很多!!
18     {
19         cin >> x1 >> x2;
20         if(x1 == res && st[x1] == false)//如果骨头在第一个杯子里,并且第一个杯子没洞,那么骨头会交换到第二个杯子的位置,而x1不等于res时,res不变,x1有洞时,res也不变。
21             res = x2;
22         else if(x2 == res && st[x2] == false)//第二个杯子同理,而举个例子,如果第二个杯子有洞,那res还是等于x2
23             res = x1;
24     }                                       
25     cout << res << endl;
26     return 0;
27 } 

 

第四次训练

原文:https://www.cnblogs.com/yctql/p/14374244.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!