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进行状态图搜索,导致在这个题浪费挺多时间(ノ`Д)ノ

  • 相关阅读:
    php DOC类型注释的用法
    Mysql 数据库更新错误
    Smarty初体验二 获取配置信息
    Smarty 模板初体验
    去网络视频广告方法——虽过时,但效果依然很好(亲测)
    织梦模板修改方法大全
    dede织梦:文章内容页调用
    织梦系统学习:文章页当前位置的写法(自认对SEO有用)
    ZOJ 3229 Shoot the Bullet
    URAL 1277 Cops and Thieves
  • 原文地址:https://www.cnblogs.com/qwertiLH/p/7588163.html
Copyright © 2011-2022 走看看