•toni2007
|
|
« Răspunde #2 : Martie 28, 2009, 16:58:36 » |
|
Nu am citit cu atentie problema, iar verificatorul nu e scris de mine personal, dar uite sursa lui. Din ce vad eu, acel mesaj este afisat atunci cand diferenta dintre dmin si dmax (care se calculeaza in functie de cele 2 valori afisate de tine) e mai mare decat eroarea tolerata. #include <stdio.h> #include <math.h> #include <stdlib.h>
#define NMAX 1001000 #define eps 1e-6 #define deps 0.01
long long x[NMAX], w[NMAX], A, B, C, D; double dmin, xpos, d, dmax, dok; int i, j, k, N, L, local_side, side;
#define minim(a,b) ((a) < (b) ? (a) : (b)) #define maxim(a,b) ((a) > (b) ? (a) : (b))
void err(int p, char *msg) { fprintf(stderr, msg); printf("%d", p); fflush(stdout); exit(0); }
int main() { freopen("center.in", "r", stdin);
scanf("%d %d %lld %lld %lld %lld %lld", &N, &L, &w[1], &A, &B, &C, &D); x[1] = 0;
for (i = 2; i <= N; i++) { // good rule ? x[i] = x[i - 1] + 1 + (((x[i - 1] * i) ^ A) % B); //w[i] = 1 + ((((w[i - 1] * B) ^ (long long) (i * D)) % minim(i, N - i + 1))); if (2 * i <= N) k = 1; else k = -1;
w[i] = maxim(1, w[i - 1] + k * (1 + (((w[i - 1] * (i + C)) ^ (D * i)) % D))); C = 1 + ((((C * C) % D) * i) % D); }
freopen("center.out", "r", stdin); if (scanf("%lf %lf", &dmin, &xpos) != 2) err(0, "fisier de iesire lipsa sau incomplet");
dmax = 0.0; for (i = 1; i <= N; i++) { if (((x[i] > xpos) || (fabs((double) x[i] - xpos) < eps)) && ((x[i] < xpos + L) || (fabs((double) x[i] - xpos - L) < eps))) d = 0; else if (x[i] < xpos) d = w[i] * (xpos - x[i]), local_side = 1; else d = w[i] * (x[i] - xpos - L), local_side = 2;
//fprintf(stderr, "%.6lf\n", d);
if (d > dmax) dmax = d, k = i, side = local_side; }
freopen("center.ok", "r", stdin); scanf("%lf", &dok);
//fprintf(stderr, "dmax(xpos=%.3lf)=%.3lf (k=%d, side=%d) -- dmin=%.3lf -- dok=%.3lf\n", xpos, dmax, k, side, dmin, dok); //fprintf(stderr, "dif(dmax,dmin)=%.6lf\n", fabs(dmax - dmin)); //fprintf(stderr, "dif(dmax,dok)=%.6lf\n", fabs(dmax - dok)); //fprintf(stderr, "dif(dmin,dok)=%.6lf\n", fabs(dmin - dok));
if (fabs(dmin - dmax) > deps) err(0, "distanta afisata nu corespunde distantei calculate"); else if (fabs(dok - dmax) > deps) err(0, "distanta incorecta"); else err(10, "Okay!!");
return 0; }
|