| ||||||||||
| 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 | |||||||||
这题我的两个程序在数据类型使用上完全一样,为什么一个AC,一个WA?请管理员指教。以下是AC的程序,朴素的方法:
/*
Program : The Average
Author : Chen Mingcheng
*/
#include <iostream>
#include <iomanip>
#include <cstdio>
using namespace std;
const int maxn = 100;
int big[maxn], small[maxn];
int n1, n2, n, l1, l2;
inline void Swap(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
void Solve() {
__int64 sum = 0;
l1 = l2 = 0;
int i, j, x;
for (i = 0; i < n; i++) {
scanf("%d", &x);
sum += x;
big[l1++] = x;
j = l1 - 1;
for (; j > 0 && big[j] > big[j - 1]; j--)
Swap(big[j], big[j - 1]);
small[l2++] = x;
j = l2 - 1;
for (; j > 0 && small[j] < small[j - 1]; j--)
Swap(small[j], small[j - 1]);
if (l1 > n1) l1--;
if (l2 > n2) l2--;
}
for (i = 0; i < l1; i++)
sum -= big[i];
for (i = 0; i < l2; i++)
sum -= small[i];
long double ans = (long double)sum;
ans /= (long double)(n - n1 - n2);
cout << setiosflags(ios::fixed) << setprecision(6) << ans << endl;
}
int main() {
while (1) {
scanf("%d %d %d", &n1, &n2, &n);
if (n1 == 0 && n2 == 0 && n == 0) break;
Solve();
}
return 0;
}
以下是WA的程序,用了<set>
/*
Program : The Average
Author : Chen Mingcheng
*/
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <set>
using namespace std;
set<int> seq1, seq2;
int n1, n2, n;
void Solve() {
seq1.clear();
seq2.clear();
int i, x;
__int64 sum = 0;
long double ans;
for (i = 0; i < n; i++) {
scanf("%d", &x);
sum += x;
seq1.insert(-x);
if (seq1.size() > n1) seq1.erase(--seq1.end());
seq2.insert(x);
if (seq2.size() > n2) seq2.erase(--seq2.end());
}
set<int>::iterator p;
for (p = seq1.begin(); p != seq1.end(); p++)
sum += *p;
for (p = seq2.begin(); p != seq2.end(); p++)
sum -= *p;
ans = (long double)sum;
ans /= (long double)(n - n1 - n2);
cout << setiosflags(ios::fixed) << setprecision(6) << ans << endl;
}
int main() {
while (1) {
scanf("%d %d %d", &n1, &n2, &n);
if (n1 == 0 && n2 == 0 && n == 0) break;
Solve();
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator