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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hihocoder1251Uvalive7263 Today Is a Rainy Day 2015北京赛区C

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

題意:

給出一個長度為N的串,每個元素介于1-6之間,現在有兩種操作方式:
A、將所有值為x的改為y
B、將某個位置為x
現在給出初始串S,要求將其變為目標串T的最小操作次數。
N≤100


分析:

首先,必須得到一個結論,所有的B操作都可以在所有A操作做完后進行
證明非常簡單:無論最優解中B操作在任意一個位置,將其在A操作做完后,將其直接改為目標串的值,這樣可以是不會增加操作次數的。
所以現在就很簡單了,我們可以暴力枚舉A操作,很容易可以發現A操作其實是一種映射關系,我們可以bfs暴力一發,最后枚舉每種操作方式,將原串根據每種操作方式進行映射,再將映射后的串用O(n)的復雜度掃描一次,若該位置的值與目標串不一樣,就需要在該位置做一次B操作。再將所有的映射關系的操作次數與其需要做的B操作次數相加,就得到了一種方案。所有方案取最小值,即可求出我們要的答案。

#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<queue> #define SF scanf #define PF printf #define MAXN 110 #define INF 0x3FFFFFFF using namespace std; int col[7],n,col1[7]; char s[MAXN],t[MAXN]; int vis[46656+100]; queue<int> q; int get_num(){int y=1,res=0;for(int i=5;i>=0;i--){res+=col[i]*y;y*=6;}return res; } void get_id(int x){for(int i=5;i>=0;i--){col[i]=x%6;x/=6;} } int check(int x){get_id(x);/*if(col[0]==1&&col[1]==1&&col[2]==2&&col[3]==3&&col[4]==4&&col[5]==5)PF("*");*/int cnt=0;for(int i=0;i<n;i++){int tx=col[s[i]-'1'];if(tx!=t[i]-'1')cnt++;}return cnt; } int bfs(){memset(vis,-1,sizeof vis);for(int i=0;i<6;i++)col[i]=i;int st=get_num();q.push(st);vis[st]=0;while(!q.empty()){int x=q.front();q.pop();get_id(x);for(int i=0;i<6;i++)col1[i]=col[i];for(int i=0;i<6;i++)for(int j=0;j<6;j++){for(int k=0;k<6;k++)if(col[k]==i)col[k]=j;int newn=get_num();if(vis[newn]==-1){vis[newn]=vis[x]+1;q.push(newn);}for(int k=0;k<6;k++)col[k]=col1[k];}} } int main(){bfs();while(SF("%s%s",t,s)!=EOF){n=strlen(s);int ans=INF;for(int i=0;i<46656;i++)if(vis[i]!=-1){ans=min(ans,check(i)+vis[i]);}PF("%d\n",ans);} }

總結

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

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