| ||||||||||
| 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 | |||||||||
一直说我错,为什么? 谁能给组数据?#include <iostream>
#include <cmath>
using namespace std;
struct Point
{
int i;
int j;
};
int H[101][101]; //¼Ç¼¸ß¶È
unsigned int M[101][101]; //¼Ç¼µ±Ç°ÐèÒªµÄÏà¶Ôʱ¼ä
unsigned int LEVT[101][101];
bool FIR[101][101]; //ÊDz»ÊÇÒѾ­ÅжϳöÀ´ÁË
int V, R, C;
Point HaveGot_isBianJie[10000];
int num_Got;
unsigned int pow2(int n) //n>=0
{
if(n ==0)
return (unsigned int)0;
unsigned int tmpN =(unsigned int)n;
unsigned int i=1;
unsigned int rst =2;
while(i<tmpN)
{
rst = rst<<1;
i++;
}
return rst;
}
bool is_bianjie(int x, int y)
{
int tmp =0;
if(x>1)
{
if(!FIR[x-1][y])
return true;
}
if(x<R)
{
if(!FIR[x+1][y])
return true;
}
if(y>1)
{
if(!FIR[x][y-1])
return true;
}
if(y<C)
{
if(!FIR[x][y+1])
return true;
}
return false;
}
int findmin()
{
int p,x,y;
x = HaveGot_isBianJie[0].i;
y = HaveGot_isBianJie[0].j;
double tmp = LEVT[x][y];
p = 0;
for(int i=1; i<num_Got;i++)
{
x = HaveGot_isBianJie[i].i;
y = HaveGot_isBianJie[i].j;
if( !is_bianjie(x,y) )
continue;
if( LEVT[x][y] < tmp)
{
tmp = LEVT[x][y];
p = i;
}
}
return p;
}
void make4zhou(int p)
{
int i = HaveGot_isBianJie[p].i;
int j = HaveGot_isBianJie[p].j;
bool isuseOld = false;
unsigned int lev = LEVT[i][j] ;
if(j>1 && !FIR[i][j-1])
{
// GETT[i][j-1] = lev;
LEVT[i][j-1] = lev + M[i][j-1];
FIR[i][j-1] = true;
if(!isuseOld)
{
HaveGot_isBianJie[p].i = i;
HaveGot_isBianJie[p].j = j-1;
isuseOld = true;
}
}
if(j<C && !FIR[i][j+1])
{
// GETT[i][j+1] = lev;
LEVT[i][j+1] = lev + M[i][j+1];
FIR[i][j+1] = true;
if(!isuseOld)
{
HaveGot_isBianJie[p].i = i;
HaveGot_isBianJie[p].j = j+1;
isuseOld = true;
}
else
{
HaveGot_isBianJie[num_Got].i = i;
HaveGot_isBianJie[num_Got].j = j+1;
num_Got++;
}
}
if(i>1 && !FIR[i-1][j] )
{
// GETT[i-1][j] = lev;
LEVT[i-1][j] = lev + M[i-1][j];
FIR[i-1][j] = true;
if(!isuseOld)
{
HaveGot_isBianJie[p].i = i-1;
HaveGot_isBianJie[p].j = j;
isuseOld = true;
}
else
{
HaveGot_isBianJie[num_Got].i = i-1;
HaveGot_isBianJie[num_Got].j = j;
num_Got++;
}
}
if(i<R && !FIR[i+1][j])
{
// GETT[i+1][j] = lev;
LEVT[i+1][j] = lev + M[i+1][j];
FIR[i+1][j] = true;
if(!isuseOld)
{
HaveGot_isBianJie[p].i = i+1;
HaveGot_isBianJie[p].j = j;
isuseOld = true;
}
else
{
HaveGot_isBianJie[num_Got].i = i+1;
HaveGot_isBianJie[num_Got].j = j;
num_Got++;
}
}
}
void work()
{
int tmp = H[1][1];
for(int i=1;i<=R;i++)
{
for(int j =1; j<= C;j++)
{
M[i][j] = pow2( H[i][j] + 25);
FIR[i][j] = false;
}
}
HaveGot_isBianJie[0].i =1;
HaveGot_isBianJie[0].j =1;
num_Got = 1;
LEVT[1][1] = M[1][1];
FIR[1][1] = true;
while(true)
{
int p =findmin();
make4zhou(p);
if(FIR[R][C] == true)
break;
}
double rst = (double)LEVT[R][C] - (double)M[R][C];
double tv = (double)V * pow(2.0, (double) ((double)H[1][1] + 25.0) );
rst = rst/(double)tv;
printf("%.2f\n",rst);
}
int main()
{
scanf("%d%d%d", &V,&R,&C);
for(int i=1;i<=R;i++)
{
for(int j =1; j<= C;j++)
scanf("%d",&H[i][j]);
}
work();
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator