锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
//1302018 2009-04-23 19:16:46 Accepted 1728 31MS 332K 1788 B C++ no way
#include<iostream>
#include<queue>
#include<stdio.h>
using namespace std;
struct Node

{
int x;
int y;
};
int dir[4][2]=
{
{-1,0},
{1,0},
{0,-1},
{0,1}};
char map[102][102];
int m,n,step;
int ok,sx,sy,ex,ey;
int mark[102][102];
void Init()

{
int i,j;
cin>>m>>n;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
mark[i][j] = -1;
for(i=0;i<m;i++)
scanf("%s",map[i]);
scanf("%d%d%d%d%d",&step,&sy,&sx,&ey,&ex);
sx --;
sy --;
ex --;
ey --;
}
void bfs()

{
int k,turns;
Node q,p;
queue<Node>Q;
p.x = sx;
p.y = sy;
Q.push(p);
while(!Q.empty())
{
q = Q.front();
Q.pop();
turns = mark[q.x][q.y] + 1;
for(k=0;k<4;k++)//鍥涙柟鍚戯紝姣忎釜鏂瑰悜閮借蛋鍒板簳 
{
p.x = q.x+dir[k][0];
p.y = q.y+dir[k][1];
while(p.x>=0 && p.x<m && p.y>=0 && p.y<n && map[p.x][p.y] == '.')//
{
if(mark[p.x][p.y] == -1)
{
if(p.x == ex && p.y== ey && turns <= step )
{//鏈鍏堟悳鍒扮殑灝辨槸鏈浼樼殑錛?nbsp;
ok = 1;
return ;
}
mark[p.x][p.y] = turns;
Q.push(p);
}
p.x += dir[k][0];
p.y += dir[k][1];
}
}//for(k=0;k<4;k++)
}//while(!Q.empty())
}
int main()

{
int t;
cin>>t;
while(t--)
{
Init();
if(sx==ex&&sy==ey)
{
printf("yes\n");
continue;
}
ok = 0;
bfs();
if( ok == 1)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
return 0;
}
]]>
//1833420 2009-04-14 16:41:33 Memory Limit Exceeded 2849 C++ 0 32769 aslys
//1835799 2009-04-17 09:10:34 Accepted 2849 C++ 780 8292 aslys
#include<iostream>
#include<queue>
using namespace std;
struct Node

{
int vi;
int vj;
int day;
int type;
friend bool operator < (Node a,Node b)
{
if(a.day != b.day)
return a.day > b.day;
else
return a.type > b.type;
}
};
priority_queue<Node>Q;
int dir[4][2] =
{-1,0,1,0,0,-1,0,1};
int m,n;
int gra[501][501];
int sum[250002];
void init()

{
int i,j;
Node p;
memset(sum,0,sizeof(sum));
//涓瀹氳鍏ㄩ儴娓呯┖錛屽垏璁板垏璁?/span>
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
scanf("%d",&gra[i][j]);
if(gra[i][j] > 0)
{
p.vi = i;
p.vj = j;
p.day = 1;
p.type = gra[i][j];
Q.push(p);
sum[gra[i][j]] ++;
}
}
}
}
void bfs()

{
int k,dmax;
Node p,q;
while(!Q.empty())
{
q = Q.top();
Q.pop();
dmax = -111111111;
for(k=0;k<4;k++)
{
p.vi = q.vi + dir[k][0];
p.vj = q.vj + dir[k][1];
if(p.vi>=1 && p.vi<=m && q.vi>=1 && q.vj<=n )
{
if(gra[p.vi][p.vj] < 0 ) 
{
if( gra[p.vi][p.vj] + q.day >= 0)
{
p.type = q.type;
p.day = q.day;
gra[p.vi][p.vj] = p.type;
Q.push(p);
sum[p.type] ++;
}
else if(gra[p.vi][p.vj] > dmax)//瀵繪壘鍏跺懆鍥存渶蹇紶鏌撶殑鏈哄瓙~
{
dmax = gra[p.vi][p.vj] ;
}
}
}//for(k=0;k<4;k++)
}
if(dmax != -111111111)
{
q.day = dmax * (-1);
Q.push(q);
}
}//while(!Q.empty())
}
int main()

{
int a,T;
while(cin>>m>>n)
{
init();
bfs();
cin>>T;
while(T--)
{
scanf("%d",&a);
printf("%d\n",sum[a]);
}
}
return 0;
}
]]>
]]>
#include<iostream>
#include<cmath>
using namespace std;
int prim[1230];//10000浠ュ唴鐨勭礌鏁板叡1229涓?/span>
int main()

{
int i,j,k;//k璁板綍10000浠ュ唴绱犳暟鐨勪釜鏁?/span>
bool primes[10000];
primes[1] = 0;
for(i=2;i<=10000;i++)
primes[i] = 1;
for(i=2;i<=5000;i++)
{
if(primes[i] == 1)
{
for(j=2;j*i<=10000;j++)
primes[j*i] = 0;
}
}
for(i=1,k=0;i<=10000;i++)
if( primes[i] == 1)
prim[k++] = i;
int m,p,q,maxs,id,jd;
while(cin>>m>>p>>q && m+p+q)
{
maxs = 1;
for(i=k-1;i>=0;i--)//绱犳暟鍊艱秺鏉ヨ秺灝?/span>
{
for(j=i ; j<k; j++)//绱犳暟鍊艱秺鏉ヨ秺澶?/span>
{
if(prim[i] * prim[j] > m || (double)prim[i]/prim[j] < (double)p/q )
break;
if(maxs < prim[i] * prim[j])
{
maxs = prim[i] * prim[j];
id = i;
jd = j;
}
}
}
cout<<prim[id]<<" "<<prim[jd]<<endl;
}
return 0;
}
]]>
#include<iostream>
#include<queue>
using namespace std;
struct Node

{
int vi,vj;
int time;//鍓╀綑鏃墮棿
int step;//鑺辮垂鏃墮棿
};
int gra[9][9];
int mark[9][9];//璧板埌i銆乯鎵鍓╀綑鐨勬椂闂?/span>
int m,n,mins;
int si,sj,ei,ej;
int dir[4][2]=
{-1,0,1,0,0,-1,0,1};
void bfs()

{
int k;
Node p,q;
queue<Node>Q;
p.step = 0;
p.time = 6;
p.vi = si;
p.vj = sj;
Q.push(p);
mark[si][sj] = p.time;
while(!Q.empty())
{
q = Q.front();
Q.pop();
if(q.vi == ei && q.vj == ej)
{
if(q.time > 0 )
{//璺戞帀
mins = q.step;
return ;
}
else
continue;
}
if(gra[q.vi][q.vj] == 4) //鏃墮棿閲嶇疆
{
mark[q.vi][q.vj] = 6;
q.time = 6;
}
for(k=0;k<4;k++)
{
p.vi = q.vi + dir[k][0];
p.vj = q.vj + dir[k][1];
p.time = q.time - 1;
p.step = q.step + 1;
if(p.vi>=0 && p.vi<m && p.vj>=0 && p.vj<n && gra[p.vi][p.vj]!=0 && q.time > 0
&& mark[p.vi][p.vj] < p.time)//涓嶈秴鐣屽張涓嶆槸澧?/span>
{
mark[p.vi][p.vj] = p.time;
Q.push(p);
}
}//for(k=0;k<4;k++)
}//while(!Q.empty())
}
int main()

{
int t;
cin>>t;
while(t--)
{
cin>>m>>n;
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cin>>gra[i][j];
if(gra[i][j] == 2)//璧風偣
{
si = i;
sj = j;
}
else if(gra[i][j] == 3)//緇堢偣
{
ei = i;
ej = j;
}
mark[i][j] = 0;
}
}
mins = 1000;
bfs();
if(mins != 1000) //閫冩帀
cout<<mins<<endl;
else
cout<<-1<<endl;
}
return 0;
}
]]>
]]>
#include<iostream>
#include<queue>
#include<string>
using namespace std;
struct Node

{
int vi;
int vj;
};
string str[21];
bool mark[21][21];
int m,n,si,sj,sum;
int dir[8][2]=
{
{-1,0},
{1,0},
{0,-1},
{0,1},
{-1,-1},
{1,-1},
{-1,1},
{1,1}};
//鍏釜鏂瑰悜
void bfs()

{
int k;
Node p,q;
queue<Node>Q;
p.vi=si;
p.vj=sj;
mark[si][sj]=1;
Q.push(p);
while(!Q.empty())
{
q=Q.front();
Q.pop();
for(k=0;k<4;k++)//涓娿佷笅銆佸乏銆佸彸
{
p.vi=q.vi+dir[k][0];
p.vj=q.vj+dir[k][1];
if(p.vi>=0 && p.vi<m && p.vj>=0 && p.vj<n)
{
if(str[p.vi][p.vj]=='.')
sum++;
else if(str[p.vi][p.vj]=='X' && mark[p.vi][p.vj]==0)
{
mark[p.vi][p.vj]=1;
Q.push(p);
}
}
else
sum++;
}
for(k=4;k<8;k++)//宸︿笂銆佸乏涓嬨佸彸涓娿佸彸涓?/span>
{
p.vi=q.vi+dir[k][0];
p.vj=q.vj+dir[k][1];
if(p.vi>=0 && p.vi<m && p.vj>=0 && p.vj<n)
{
if(str[p.vi][p.vj]=='X' && mark[p.vi][p.vj]==0)
{
mark[p.vi][p.vj]=1;
Q.push(p);
}
}
}
}//while(!Q.empty())
}
int main()

{
while(cin>>m>>n>>si>>sj && m+n+si+sj)
{
si--;
sj--;
int i,j;
for(i=0;i<m;i++)
cin>>str[i];
sum=0;
memset(mark,0,sizeof(mark));
bfs();
cout<<sum<<endl;
}
return 0;
}
]]>