我是靠谱客的博主 大意嚓茶,最近开发中收集的这篇文章主要介绍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("%dn", ans); } return 0; }
瞎 : 做题经验不够,不能根据通过人数大胆往简单方向想,导致一直在乱七八糟找规律,期间还写了个BFS进行状态图搜索,导致在这个题浪费挺多时间(ノ`Д)ノ
转载于:https://www.cnblogs.com/LiHior/p/7588163.html
最后
以上就是大意嚓茶为你收集整理的2017南宁网络赛 Problem J Minimum Distance in a Star Graph ( 模拟 )的全部内容,希望文章能够帮你解决2017南宁网络赛 Problem J Minimum Distance in a Star Graph ( 模拟 )所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复