1. 程式人生 > >2017南寧網絡賽 Problem J Minimum Distance in a Star Graph ( 模擬 )

2017南寧網絡賽 Problem J Minimum Distance in a Star Graph ( 模擬 )

題意 個數字 include spl 方向 元素交換 isp scan mic

題意 : 亂七八糟說了一大堆,實際上就是問你從一個序列到另個序列最少經過多少步的變化,每一次變化只能取序列的任意一個元素去和首元素互換

分析 : 由於只能和第一個元素去互換這種操作,所以沒啥最優的特別方法,只要乖乖模擬即可,如果第一個元素不在正確位置則將它和正確位置的元素交換使其回到正確位置,如果第一個元素的位置就是正確的,那麽就往後找不在正確位置的元素將它互換到第一個去,然後再對第一個元素進行判斷即可,直到序列變成最終滿足條件的序列........

技術分享
#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\n", ans); } return 0; }
View Code

瞎 : 做題經驗不夠,不能根據通過人數大膽往簡單方向想,導致一直在亂七八糟找規律,期間還寫了個BFS進行狀態圖搜索,導致在這個題浪費挺多時間(ノ`Д)ノ

2017南寧網絡賽 Problem J Minimum Distance in a Star Graph ( 模擬 )