Codeforces Round #408 B. Find The Bone

来源:互联网 发布:淘宝赚钱 编辑:程序博客网 时间:2024/06/06 20:26

题目网址: Codeforces Round #408 B. Find The Bone

题意分析:

  • 题意: 有n个杯子, 也有m个洞(被杯子盖着的), 且骨头初始放在第1个杯子内, zane会对两个杯子做k次交换的动作, 求最终骨头的位置.注意, 骨头掉进洞里就不会被交换了

  • 思路: 模拟题, 掉进洞里, 骨头最终位置就是洞的那个位置, 没有掉进洞里, 就每次模拟交换杯子即可.

代码:

#include <iostream>#include <cstring>using namespace std;const int SIZE = 1e6+5;int cup[SIZE];int hole[SIZE];void swap(int &a, int &b){    int tmp = a;    a = b;    b = tmp;}int main(int argc, char const *argv[]){    int n, m, k;    int tmp;    int l, r;    while (~scanf("%d %d %d", &n, &m, &k))    {        memset(cup, 0, sizeof(cup));        memset(hole, 0, sizeof(hole));        cup[1] = 2;        for (int i = 2; i <= n; ++i)        {            cup[i] = 1;        }        for (int i = 0; i < m; ++i)        {            scanf("%d", &tmp);            hole[tmp] = 1;        }        bool flag = false;        int ans = 1;        if(hole[1] == 1)        {            flag = true;        }        for (int i = 0; i < k; ++i)        {            scanf("%d %d", &l, &r);            if(!flag)            {                if(cup[l] == 2 && hole[r] == 1)                {                    flag = true;                    ans = r;                    cup[l] = 1;                }                if(cup[r] == 2 && hole[l] == 1)                {                    flag = true;                    ans = l;                    cup[r] = 1;                }                swap(cup[l], cup[r]);                if(cup[r] == 2) ans = r;                if(cup[l] == 2) ans = l;            }        }        printf("%d\n", ans);    }    return 0;}
原创粉丝点击