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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

usaco Magic Squares

發布時間:2023/11/27 生活经验 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 usaco Magic Squares 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我搜了一下康拓展開定理結果下面解釋就是用這題的做例子。稍微改一下就行了。vis不僅記錄了他是否被便利過了還可以順便用來計數不過注意當m==0是vis[0]==0但是contor數為0的數列就是12345678是訪問過的。去掉就行了。還有這一題當改變次數為0時要輸出兩個換行不知道為什么。

/*
ID: jinbo wu
TASK: msquare
LANG:C++
*/
#include<bits/stdc++.h>
using namespace std;
const int maxn=40321;
const int fac[8] = { 1, 1, 2, 6, 24, 120, 720, 5040 };
string ans[maxn];
int  vis[maxn];
struct node
{int a[8];
}b;
int contor(node&t)
{int num=0,tmp;for(int i=0;i<8;i++){tmp=0;for(int j=i+1;j<8;j++){if(t.a[i]>t.a[j])tmp++;}num+=tmp*fac[7-i];}return num;
}
void A(node&t)
{swap(t.a[0],t.a[7]);swap(t.a[1],t.a[6]);swap(t.a[2],t.a[5]);swap(t.a[3],t.a[4]);
}
void B(node&t)
{swap(t.a[3],t.a[2]);swap(t.a[4],t.a[5]);swap(t.a[2],t.a[1]);swap(t.a[5],t.a[6]);swap(t.a[1],t.a[0]);swap(t.a[6],t.a[7]);
}
void C(node&t)
{swap(t.a[6],t.a[2]);swap(t.a[1],t.a[2]);swap(t.a[6],t.a[5]);
}
void init()
{node t;for(int i=0;i<8;i++)t.a[i]=i+1;queue<node> q;q.push(t);vis[0]=0;while(!q.empty()){t=q.front();q.pop();for(int i=0;i<3;i++){node v=t;switch (i){case 0 :{A(v);break;}case 1 : {B(v);break;}case 2 :{C(v);break;} }int m=contor(v);if(!vis[m]&&m!=0){vis[m]=vis[contor(t)]+1;;q.push(v);char ch='A'+i;ans[m]=ans[contor(t)]+ch;}}}
}
int main()
{freopen("msquare.in","r",stdin);freopen("msquare.out","w",stdout);init();for(int i=0;i<8;i++)cin>>b.a[i];int k=contor(b);cout<<vis[k]<<endl;if(vis[k]==0)cout<<endl;int l=0;while(ans[k][l]!='\0'){for(int i=0;i<=60&&ans[k][l]!='\0';i++)cout<<ans[k][l++];cout<<endl;}
//	cout<<endl;
}


總結

以上是生活随笔為你收集整理的usaco Magic Squares的全部內容,希望文章能夠幫你解決所遇到的問題。

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