Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
时限是不是太紧了,这样都TLE,过得程序快的就那两个阿#include <iostream.h> #include <string.h> #include <algorithm> #define inf 20000000 #define KB(i) (k&(1<<(i))) #define BIN(i) (1<<(i)) int b[1<<16],v[1<<16],s[1<<16],min,sum; int a[]={51,102,204,816,1632,3264,13056,26112,52224}; char str[20]; int maxDFS(int k,int step) { return 0; } int dfs(int k,int dep) { if(b[k]!=-1) return b[k]; if(v[k]!=dep) return 0; int i,d=0; --dep; for(i=0;i<16;++i) if(k&BIN(i)) { if(i-4>=0 && !KB(i-4)) d += dfs((k|BIN(i-4))&(~BIN(i)),dep); if(i+4<16 && !KB(i+4)) d += dfs((k|BIN(i+4))&(~BIN(i)),dep); if(i%4 != 0 && !KB(i-1)) d += dfs((k|BIN(i-1))&(~BIN(i)),dep); if(i%4!=3 && !KB(i+1)) d += dfs((k|BIN(i+1))&(~BIN(i)),dep); } return b[k] = d; } void minBFS(char c) { int k=0,r,f,i,j,d; for(i=0;i<16;++i) if(str[i]==c) k |= BIN(i); d = k; std::fill(v,v+(1<<16),inf); for(i=0;i<9;++i) v[a[i]]=0,s[i]=a[i]; for(r=0,f=9;v[d]==inf;++r) { k = s[r]; for(i=0;i<16;++i) if(k&BIN(i)) { if(i-4>=0 && !KB(i-4)) { j = ((k|BIN(i-4))&(~BIN(i))); if(v[j]==inf) { v[j] = v[k]+1; s[f++] = j; } } if(i+4<16 && !KB(i+4)) { j = ((k|BIN(i+4))&(~BIN(i))); if(v[j]==inf) { v[j] = v[k]+1; s[f++] = j; } } if(i%4 != 0 && !KB(i-1)) { j = ((k|BIN(i-1))&(~BIN(i))); if(v[j]==inf) { v[j] = v[k]+1; s[f++] = j; } } if(i%4!=3 && !KB(i+1)) { j = ((k|BIN(i+1))&(~BIN(i))); if(v[j]==inf) { v[j] = v[k]+1; s[f++] = j; } } } } if(min < v[d]) return ; std::fill(b,b+(1<<16),-1); for(i=0;i<9;++i) b[a[i]] = 1; k = dfs(d,v[d]); if(min == v[d]) sum += k; else { min = v[d]; sum = k; } } void minStep() { min = inf; minBFS('A'); minBFS('B'); minBFS('C'); minBFS('D'); } void main() { char st[4]; int i; while(cin>>str) { for(i=0;i<3;++i) { cin>>st; strcat(str,st); } minStep(); cout<<min<<" "<<sum<<endl; } } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator