日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

hdu 5077 NAND(打表)2014 Asia regional 鞍山站 H题

發布時間:2025/7/14 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu 5077 NAND(打表)2014 Asia regional 鞍山站 H题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:點擊打開鏈接

題意:就是一個按位運算的一個函數。問最少經過多少步運算能夠得到給定數。

思路:不是我投機取巧想打表。是特么這題僅僅能打表。。

。打表思想用能夠得到的數的集合表示狀態bfs;最后有一個須要11步的須要打將近1h。除去這一個十分鐘就夠了。

cpp:

#include <cstdio> #include <cstring> #include <queue> #include <vector> #include <map> using namespace std; int mark[300]; struct node{int deep;vector <int> us;void init(){deep=0;us.push_back(15);us.push_back(51);us.push_back(85);us.push_back(0);us.push_back(255);}bool find(int n){for(int i=0;i<us.size();i++)if(us[i]==n) return 1;return 0;} }; int Nand(int a,int b){return (255^(a&b)); } queue <node> Q; map<vector<int>,bool> Map; //打出所有表版本號的check bool check(){int bj=1;for(int i=0;i<256;i++){if(mark[i]<0) {bj=0;}}if(bj)for(int i=0;i<256;i++){printf("%d , ",mark[i]);}return bj; } //留下最后一個數不打的check版本號 bool check(){int cnt=0;for(int i=0;i<256;i++){if(mark[i]<0) {cnt++;}}if(cnt<2)for(int i=0;i<256;i++){printf("%d , ",mark[i]);}return (cnt<2); } void bfs(){node tpe;tpe.init();Q.push(tpe);for(int i=0;i<5;i++){mark[tpe.us[i]]=0;}while (!check()){node tp=Q.front();Q.pop();for(int i=0;i<tp.us.size();i++){for(int j=0;j<tp.us.size();j++){int temp=Nand(tp.us[i],tp.us[j]);if(mark[temp]<0) mark[temp]=tp.deep+1;if(!tp.find(temp)){node he=tp;he.deep++;he.us.push_back(temp);sort(he.us.begin(),he.us.end());if(Map[he.us]==1) continue;Map[he.us]=1; Q.push(he);} }}} } int main(){for(int i=0;i<256;i++) mark[i]=-1;bfs();return 0; }

總結

以上是生活随笔為你收集整理的hdu 5077 NAND(打表)2014 Asia regional 鞍山站 H题的全部內容,希望文章能夠幫你解決所遇到的問題。

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