zoukankan      html  css  js  c++  java
  • 2017南宁网络赛 Problem J Minimum Distance in a Star Graph ( 模拟 )

    题意 : 乱七八糟说了一大堆,实际上就是问你从一个序列到另个序列最少经过多少步的变化,每一次变化只能取序列的任意一个元素去和首元素互换

    分析 : 由于只能和第一个元素去互换这种操作,所以没啥最优的特别方法,只要乖乖模拟即可,如果第一个元素不在正确位置则将它和正确位置的元素交换使其回到正确位置,如果第一个元素的位置就是正确的,那么就往后找不在正确位置的元素将它互换到第一个去,然后再对第一个元素进行判断即可,直到序列变成最终满足条件的序列........

    #include<bits/stdc++.h>
    using namespace std;
    map<char, int> pos;
    char st[11], en[11];
    int n;
    bool OK()
    {
        for(int i=0; i<n; i++){
            if(st[i] != en[i])
                return false;
        }return true;
    }
    int main(void)
    {
        scanf("%d", &n);
        for(int t=1; t<=5; t++){
            pos.clear();
            scanf("%s %s", st, en);
            for(int i=0; i<n; i++){
                pos[en[i]] = i;///记录每一个数字的正确位置
            }
            int ans = 0;
            int p = 0;
            while(!OK()){///每一次检查一下序列是否已经变成了最终序列
                if(en[0] != st[0]){
                    swap(st[0], st[pos[st[0]]]);
                    ans++;
                }else{
                    for(int i=1; i<n; i++){
                        if(en[i] != st[i]){
                            swap(st[0], st[i]);
                            ans++;
                            break;
                        }
                    }
                }
            }
            printf("%d
    ", ans);
        }
        return 0;
    }
    View Code

    瞎 : 做题经验不够,不能根据通过人数大胆往简单方向想,导致一直在乱七八糟找规律,期间还写了个BFS进行状态图搜索,导致在这个题浪费挺多时间(ノ`Д)ノ

  • 相关阅读:
    清北学堂(2019 5 3) part 6
    清北学堂(2019 5 2) part 5
    清北学堂(2019 5 1) part 4
    dijkstra
    清北学堂(2019 4 30 ) part 3
    2020/5/1
    2020/4/30
    2020/4/29
    HSV模型
    2020/4/28
  • 原文地址:https://www.cnblogs.com/qwertiLH/p/7588163.html
Copyright © 2011-2022 走看看