| ||||||||||
| 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 | |||||||||
应该用multisetIn Reply To:这题我的两个程序在数据类型使用上完全一样,为什么一个AC,一个WA?请管理员指教。 Posted by:cmc_hope at 2006-05-28 20:07:04 > 以下是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