ZOJ3411 Special Special Judge

问题描述:

The norm of a vector v = (v1, v2, ... , vn) is define as norm(v) = |v1| + |v2| + ... + |vn|. And in Problem 0000, there are n cases, the standard output is recorded as a vector x = (x1, x2, ... , xn). The output of a submitted solution is also records as a vector y = (y1, y2, ... , yn). The submitted solution will be accepted if and only if norm(x - y)m (a given tolerance).

    Knowing that all the output xi are in range [a, b], an incorrent solution that outputs integer yi in range [a, b] with equal probability may also get accepted. Given the standard output xi, you are supposed to calculate the possibility of getting accepted using such solution.

n, m, a, b (1 ≤ n, m ≤ 50, -50 ≤ a < b ≤ 50)

Accepted 3411 Java 380MS 9938K
  
    
import java.util. * ;
import java.math. * ;

public class Main{
public static void main(String[] args){
int n,m,a,b,x[] = new int [ 51 ];
BigInteger d[][]
= new BigInteger[ 51 ][ 51 ],f1,f2,f3;
Scanner cin
= new Scanner(System.in);
while (cin.hasNext()) {
n
= cin.nextInt();
m
= cin.nextInt();
a
= cin.nextInt();
b
= cin.nextInt();
// System.out.println(n+" "+m+" "+a+" "+b);
int i,j,k,t;
for (i = 1 ;i <= n;i ++ )
x[i]
= cin.nextInt();
for (i = 0 ;i <= n;i ++ )
for (j = 0 ;j <= m;j ++ )
d[i][j]
= BigInteger.ZERO;
for (i = a;i <= b;i ++ ){
t
= Math.abs(i - x[ 1 ]);
// System.out.println(t);
if (t <= m) {
d[
1 ][t] = d[ 1 ][t].add(BigInteger.ONE);
// System.out.println("d[1]["+t+"]="+d[1][t]);
}
}

for (i = 2 ;i <= n;i ++ ){
for (j = a;j <= b;j ++ ){
t
= Math.abs(j - x[i]);
if (t <= m){
for (k = t;k <= m;k ++ ){
d[i][k]
= d[i][k].add(d[i - 1 ][k - t]);
// System.out.println("d["+i+"]["+k+"]="+d[i][k]);
}
}
}
}
f1
= BigInteger.ZERO;
for (i = 0 ;i <= m;i ++ )
f1
= f1.add(d[n][i]);
f2
= BigInteger.ONE;
for (i = 1 ;i <= n;i ++ )
f2
= f2.multiply(BigInteger.valueOf(b - a + 1 ));
// System.out.println(f1+" "+f2);
f3 = f1.gcd(f2);
f1
= f1.divide(f3);
f2
= f2.divide(f3);
System.out.println(f1
+ " / " + f2);
}
}
}
/*
1 1 0 2
1
4 2 2 5
2 3 2 4
4 3 2 5
2 3 2 4

1/1
3/32
7/32
*/

代码的核心部分是Lines 30-40。简单吧,嘻嘻…

你可能感兴趣的:(ZOJ)