标签:
BFS暴力搜索.....
6 7 10 13 10 11
7 -1 12
/* *********************************************** Author :CKboss Created Time :2015年07月28日 星期二 22时00分45秒 File Name :HDOJ5323.cpp ************************************************ */ #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <string> #include <cmath> #include <cstdlib> #include <vector> #include <queue> #include <set> #include <map> using namespace std; typedef long long int LL; typedef pair<LL,LL> pII; const LL INF = (1LL<<60); LL L,R; LL ans; int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); while(cin>>L>>R) { ans=INF; queue<pII> q; q.push(make_pair(L,R)); while(!q.empty()) { pII u = q.front(); q.pop(); if(u.second>ans) continue; if(u.first==0) { ans=min(ans,u.second); continue; } LL deta = u.second-u.first+1; if(deta>u.first) continue; LL right = u.first-1; LL left1 = right-deta+1; LL left2 = right-deta; /// push_left1 if(left1>=0&&u.second>=0&&left1<=u.second) { pII v; v.first=left1; v.second=u.second; LL D=v.second-v.first+1; if(D>v.first&&v.first) ; else q.push(v); } /// push_left2 if(left2>=0&&u.second>=0&&left2<=u.second) { pII v; v.first=left2; v.second=u.second; LL D=v.second-v.first+1; if(D>v.first&&v.first) ; else q.push(v); } LL left=u.second+1; LL right1=left+deta-1; LL right2=left+deta-2; /// push_right1 if(u.first>=0&&right1>=0&&u.first<=right1&&right1<ans) { pII v; v.first=u.first; v.second=right1; LL D=v.second-v.first+1; if(D>v.first&&v.first) ; else q.push(v); } /// push_right2 if(u.first>=0&&right2>=0&&u.first<=right2&&right2<ans) { pII v; v.first=u.first; v.second=right2; LL D=v.second-v.first+1; if(D>v.first&&v.first) ; else q.push(v); } } if(ans==INF) ans=-1; cout<<ans<<endl; } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
HDOJ 5323 Solve this interesting problem BFS搜索
标签:
原文地址:http://blog.csdn.net/ck_boss/article/details/47115191