日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ICPC 2015 北京 Today Is a Rainy Day

發布時間:2023/12/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ICPC 2015 北京 Today Is a Rainy Day 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:https://vjudge.net/problem/UVALive-7263

或者:http://hihocoder.com/problemset/problem/1251

?

?

題目大意:給你兩個字符串,問你從一個變成另一個的最少變化次數。變化規則有二,一是將某一字符變成另一個字符,二是將某一類字符變成另一類字符,都算變化一次。

?

題解:首先有一個彎要轉過來,就是先進行第二種變化,再進行第一種變化。我們首先暴力出所有的變化的可能性,以及變過去需要的變化次數,然后再進行變化一,加上變化一的次數。

比如:

初始: 1 2 3 4 5 6

目標: 1 2 3 3 6 5

表示的變化是所有初始中的4最后變成3,所有初始中的5最后變成6,所有初始中的6最后變成5,通過BFS搜出最少變化次數為4,即依次為:4變3,6變4,5變6,4變5。然后再遍歷字符串進行變化一。

代碼:

?

#include <bits/stdc++.h> #define N 50000 using namespace std;void turn_to(int x,int *a) //10進制變6進制 {for (int i=5;i>=0;i--,x/=6) a[i]=x % 6; } int turn_back(int *a) //6進制變10進制 {int t=0;for (int i=0;i<6;i++)t=t*6+a[i];return t; }int f[N]; string a,b; int G[10][10],r[10]; queue<int>q;void presolve() //BFS最小變化次數 {while (!q.empty())q.pop();int a[10]={0,1,2,3,4,5},c[10];int t=turn_back(a);memset(f,0x3f,sizeof f);f[t]=0;q.push(t);while (!q.empty()){int x=q.front();q.pop();turn_to(x,a);for (int i=0;i<6;i++)for (int j=0;j<6;j++) //暴力所有可能的變化{memcpy(c,a,sizeof a);for (int k=0;k<6;k++) if (c[k]==i) c[k]=j; //將當前狀態中的所有i變為jt=turn_back(c);if (f[t]>f[x]+1){f[t]=f[x]+1;q.push(t);}}} }int main() {int x[10];presolve();while(cin>>b>>a){memset(G,0,sizeof G);memset(r,0,sizeof r);for (int i=0;i<a.length();i++){int u=a[i]-'1',v=b[i]-'1';r[u]++;G[u][v]++;}int ans=1e8;for (int i=0;i<N-10;i++) //枚舉所有變化{int t=f[i];turn_to(i,x);for (int j=0;j<6;j++) t+=r[j]-G[j][x[j]]; //變化一ans=min(ans,t);}printf("%d\n",ans);} }

?

?

?

總結

以上是生活随笔為你收集整理的ICPC 2015 北京 Today Is a Rainy Day的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。