MiYu鍘熷垱, 杞笘璇鋒敞鏄?: 杞澆鑷?nbsp;______________鐧界櫧銇眿
棰樼洰鍦板潃:
http://acm.hdu.edu.cn/showproblem.php?pid=1253
棰樼洰鎻忚堪:
1 3 3 4 20 0 1 1 1 0 0 1 1 0 1 1 1 1 1 1 1 1 0 0 1 0 1 1 1 0 0 0 0 0 1 1 0 0 1 1 0
11
棰樼洰鍒嗘瀽:
浠g爜濡備笅:
/*
MiYu鍘熷垱, 杞笘璇鋒敞鏄?: 杞澆鑷?______________鐧界櫧銇眿
http://www.cnblog.com/MiYu
Author By : MiYu
Test : 1
Program : HDU1253
*/
#include <iostream>
#include <queue>
using namespace std;
int TLE[56][56][56];
const int d[6][3] = { { 0,0,1 },{ 0,0,-1 },{ 0,-1,0 },{ 0,1,0 },{ 1,0,0 },{ -1,0,0 } };
int A, B, C, T, m;
typedef struct pos{
pos(){ x=y=z=n=0; }
void setPos ( int a,int b,int c, int count ){ x=a;y=b;z=c;n=count; }
bool isEnd () { if ( x==1&&y==1&&z==1 )return true;return false; }
int x,y,z;
int n;
}pos;
pos t,p;
#define CMP(A,B) (A.n < B.n)
typedef class Heap {
public:
pos h[70000 * 2];
int n, p, c;
Heap() {
n = 0;
}
void inline push(pos e) {
for (p = ++n; p > 1 && CMP(e,h[p>>1]); h[p] = h[p>>1], p >>= 1)
;
h[p] = e;
}
int inline pop(pos &e) {
if (!n)
return 0;
for (e = h[p = 1], c = 2; c < n
&& CMP(h[c += (CMP(h[c + 1],h[c]) && c < n - 1)], h[n]);
h[p] = h[c], p = c, c <<= 1)
;
h[p] = h[n--];
return 1;
}
}Heap;
Heap WA;
int RE ()
{
if ( A+B+C-2 > T || TLE[A][B][C] == 0 )
return -1;
t.setPos ( A,B,C,0 );
TLE[A][B][C] = 0;
WA.push ( t );
while ( WA.pop(t) ){
if ( t.x+t.y+t.z-2 > T-t.n )
continue;
if ( t.isEnd() )
return t.n;
for ( int i = 0; i != 6; ++ i ){
int x = t.x+d[i][0], y=t.y+d[i][1], z=t.z+d[i][2];
if ( TLE[ x ][ y ][ z ] != 0 ){
TLE[ x ][ y ][ z ] = 0;
p.setPos ( x, y, z, t.n+1 );
if ( p.isEnd() && p.n <= T )
return p.n;
if ( p.n <= T )
WA.push ( p );
}
}
}
return -1;
}
inline bool scan_d(int &num)
{
char in;bool IsN=false;
in=getchar();
if(in==EOF) return false;
while(in!='-'&&(in<'0'||in>'9')) in=getchar();
if(in=='-'){ IsN=true;num=0;}
else num=in-'0';
while(in=getchar(),in>='0'&&in<='9'){
num*=10,num+=in-'0';
}
if(IsN) num=-num;
return true;
}
int main ()
{
int K;
scan_d(K);
while ( K -- ){
while ( WA.pop(p) ) ;
memset ( TLE, 0 , sizeof ( TLE ) );
scan_d(A); scan_d(B); scan_d(C); scan_d(T);
for ( int i = 1; i <= A; ++ i ){
for ( int j = 1; j <= B; ++ j ){
for ( int k = 1; k <= C; ++ k ){
scan_d(m);
TLE[i][j][k] = m == 1 ? 0 : 1;
}
}
}
TLE[1][1][1] = 1;
cout << RE () << endl;
}
//system( "pause" );
return 0;
}
MiYu鍘熷垱, 杞笘璇鋒敞鏄?: 杞澆鑷?nbsp;______________鐧界櫧銇眿
棰樼洰鍦板潃:
http://acm.hdu.edu.cn/showproblem.php?pid=1181
棰樼洰鎻忚堪:
棰樼洰鍒嗘瀽:
MiYu鍘熷垱, 杞笘璇鋒敞鏄?: 杞澆鑷?a > ______________鐧界櫧銇眿
6 8
Case 1: 1 4 3 2 5 6 1 6 5 2 3 4 Case 2: 1 2 3 8 5 6 7 4 1 2 5 8 3 4 7 6 1 4 7 6 5 8 3 2 1 6 7 4 3 8 5 2棰樼洰鍒嗘瀽:鍏稿瀷鐨?DFS 棰樼洰, 涓嶉渶瑕?浠涔堝壀鏋? 鐩存帴 絀蜂婦 + 鍥炴函 灝監(jiān)K浜? 涓嶈繃鍊煎緱涓鎻愮殑鏄?榪欓杈撳嚭寰圔T, 涓鑸殑 鍓嶅悗 杈撳嚭 鍥炶濺 , 絎竴涓洖杞︾敤 if( n == 1 ) 鍥炶濺; 鏉ュ仛PE浜嗗ソ鍑犳, 鏈鍚庣洿鎺ュ湪紼嬪簭鏈鍚?/span> 杈撳嚭2涓洖杞︾绔熺劧灝盇浜? YM鍟?..........浠g爜濡備笅:/* MiYu鍘熷垱, 杞笘璇鋒敞鏄?: 杞澆鑷?______________鐧界櫧銇眿 http://www.shnenglu.com/MiYu Author By : MiYu Test : Program : */ #include <iostream> using namespace std; bool prim[25]; int res[25]; bool hash[25]; int N; void setPrim () { memset ( prim, 0, sizeof ( prim ) ); prim[2] = prim[3] = prim[5] = prim[7] = prim[11] = prim[13] = prim[17] = prim[19] = prim[23] = true; } bool DFS ( int num , int n ) { res[n] = num; if ( n > N ) { return false; } if ( n == N - 1 ) { for ( int i = 2; i <= N; ++ i ) { if ( prim[num + i] && prim[ i + 1 ] && !hash[i] ) { res[n+1] = i; for ( int i = 1; i <= N; ++ i ) printf ( i == 1 ? "%d" : " %d",res[i] ); putchar ( '\n' ); } } } for ( int i = 2; i <= N; ++ i ) { if ( prim[ num + i ] && !hash[i] ) { hash[i] = true; DFS ( i, n + 1 ); hash[i] = false; } } return false; } int main () { setPrim (); int ca = 1; while ( cin >> N ) { sizeof ( hash, 0 , sizeof ( hash ) ); printf ( "Case %d:\n",ca++ ); hash[1] = true; DFS ( 1, 1 ); putchar ( '\n' ); } return 0; }
#include <iostream> #include <cmath> using namespace std; #define POW(x) ( (x) * (x) ) #define POW3(x) ( POW(x) * (x) ) #define POW4(x) ( POW(x) * POW(x) ) double y = 0; bool douEql ( double a,double b ) { if ( fabs( a - b ) <= 1e-6 ) return true; return false; } double cal ( double n ) { return 8.0 * POW4(n) + 7 * POW3(n) + 2 * POW(n) + 3 * n + 6 ; } double biSearch ( double l, double r ) { if ( douEql ( l,r ) ) { if ( douEql ( y, cal ( l ) ) ) return l; return -1; } double mid = ( l + r ) / 2.0; if ( douEql ( y, cal ( mid ) ) ) return mid; else if ( cal ( mid ) > y ) return biSearch ( l,mid - 0.0001 ); else return biSearch ( mid + 0.0001, r ); } int main () { int T; scanf ( "%d",&T ); while ( T -- ) { scanf ( "%lf",&y ); if ( cal(0) >= y && cal(100) <= y ) { printf ( "No solution!\n" ); continue; } double res = biSearch ( 0.0, 100.0 ); if ( res == -1 ) printf ( "No solution!\n" ); else printf ( "%.4lf\n",res ); } return 0; }