Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

越来越多的灵异事件发生了

Posted by fanhqme at 2008-12-07 20:01:45 on Problem 1191
1.用NeverLiving的号提交,32MS,用这个号提交,0MS
2.用NeverLiving的号提交,G++ Ac,C++ Wa,用这个号提交,C++ Ac
3.难道题目的意思是“所有得分的平方的和与平均得分的平方的和的差的算术平方根的最小值”,而不是“所有得分与平均得分的差的平方的和的算术平方根的最小值”?


4.以下程序竟然Ac了
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int map[8][8],s[64][64],N;
int yes[64][64][15];
long double dp[64][64][15],want;
long double Abs(long double a){if (a>0.0)return a;return -a;}
long double t2(long double a){return a*a;}
long double f(int u,int v,int h){
    int a=u/8,b=u%8,c=v/8,d=v%8;
    long double t;
    if (dp[u][v][h]>=0.0)return dp[u][v][h];
    if (h==1)return dp[u][v][h]=t2((long double)(s[u][v]));
    for (int i=a;i<=c && (c-i)*(d-b+1)>=h-1;i++){
        t=t2((long double)(s[a*8+b][i*8+d]))                    +f(i*8+8+b,v,h-1);
        if (dp[u][v][h]<0.0 || dp[u][v][h]>t){
           dp[u][v][h]=t;
           yes[u][v][h]=i;
        }
    }
    for (int i=c;i>=a && (i-a)*(d-b+1)>=h-1;i--){
        t=t2((long double)(s[i*8+b][c*8+d]))                    +f(a*8+b,i*8-8+d,h-1);
        if (dp[u][v][h]<0.0 || dp[u][v][h]>t){
           dp[u][v][h]=t;
           yes[u][v][h]=i;
        }
    }
    for (int j=b;j<=d && (d-j)*(c-a+1)>=h-1;j++){
        t=t2((long double)(s[a*8+b][c*8+j]))                    +f(a*8+j+1,v,h-1);
        if (dp[u][v][h]<0.0 || dp[u][v][h]>t){
           dp[u][v][h]=t;
           yes[u][v][h]=-j-1;
        }
    }
    for (int j=d;j>=b && (j-b)*(c-a+1)>=h-1;j--){
        t=t2((long double)(s[a*8+j][c*8+d]))                    +f(a*8+b,c*8+j-1,h-1);
        if (dp[u][v][h]<0.0 || dp[u][v][h]>t){
           dp[u][v][h]=t;
           yes[u][v][h]=-j-1;
        }
    }
    return dp[u][v][h];
}
int main()
{
    scanf("%d",&N);
    want=0.0;
    for (int i=0;i<8;i++)for (int j=0;j<8;j++){
        scanf("%d",map[i]+j);
        want+=(long double)(map[i][j]);
    }
    for (int i=0;i<64;i++)for (int j=0;j<64;j++)for (int k=0;k<15;k++)dp[i][j][k]=-1.0;
    want=want/(long double)(N);
    for (int i=0;i<8;i++){
        for (int j=0;j<8;j++){
            s[i*8][i*8+j]=map[i][j];
            if (j>0)s[i*8][i*8+j]+=s[i*8][i*8+j-1];
            for (int k=1;k<=j;k++)s[i*8+k][i*8+j]=s[i*8][i*8+j]-s[i*8][i*8+k-1];
        }
        if (i>0)for (int j=0;j<8;j++)for (int k=j;k<8;k++)
            s[j][i*8+k]=s[j][i*8-8+k]+s[i*8+j][i*8+k];
        for (int j=1;j<=i;j++)for (int k=0;k<8;k++)for (int l=k;l<8;l++)
            s[j*8+k][i*8+l]=s[k][i*8+l]-s[k][j*8-8+l];
    }
    cout <<setiosflags(ios::fixed)<<setprecision(3)<<sqrt(f(0,63,N)/(long double)N-want*want)<<endl;
    return 0;
}


Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator