| ||||||||||
| 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 | |||||||||
Re:一直说我错,为什么? 谁能给组数据?In Reply To:一直说我错,为什么? 谁能给组数据? Posted by:bmexue at 2006-10-24 10:18:48 > #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