题目大意:n个学生去旅行,旅行中每个学生先垫付,最后平摊所有费用,多退少补,并且支出差距控制在1分钱以内,求最小的交易金额。


                                                      @2013-8-16

  以前在zoj做过,把原来的代码直接提交了,虽然AC了,可是记得原来有问题,再一看确实感觉有问题,竟然AC了...然后就自己重写,写完之后总是WA,就放下了,过一段时间在看,再改,提交,仍是WA,太打击人了,不算难的一道题把我虐成这样...今天看World of Seven上的解法时猛然醒悟,自己一直在纠结精度方面的问题,却没发现在向下截取aver时转换成int后直接除100,变成了整数的除法了...只能无语了...

  自己的思路就是求平均数后向下截取,然后用 总金额-平均数*n 得到少的金额,对每人的花费进行排序,少的金额就通过让后面的人多拿一美分补上。 

 #include <stdio.h>
#include <stdlib.h>
#define MAXN 1010 int cmp(const void *_a, const void *_b)
{
double *a = (double*)_a;
double *b = (double*)_b;
return *a - *b;
} int main(void)
{
#ifdef LOCAL
freopen("in", "r", stdin);
#endif
int n, i, p;
double aver, sum, exchange;
double cost[MAXN];
while (scanf("%d", &n) != EOF)
{
if (n == ) break;
sum = ;
for (i = ; i < n; i++)
{
scanf("%lf", &cost[i]);
sum += cost[i];
}
aver = sum / n;
aver = (int)(aver*)/100.0; /* floor the aver */
exchange = ;
p = (int)((sum-aver*n)/0.01+0.1);
qsort(cost, n, sizeof(double), cmp);
for (i = n-; i >= n-p; i--)
if (cost[i] > aver+0.01)
exchange += cost[i]-(aver+0.01);
for (i = n-p-; i >= ; i--)
if (cost[i] > aver)
exchange += cost[i]-aver;
printf("$%.2lf\n", exchange);
}
return ;
}

  这个题原来留了好几份代码,现在看看也能看出一些东西,从最初的用c自己用选择排序进行排序到后来用qsort函数排序,到现在用c++的sort,以及代码风格的一些小小改进,发现自己也不是毫无变化了:D,不过长进的也就这些罢了,算法方面还是没什么长进 -_-||

  网上流行另一个版本,World of Seven 上如下描述:

  The problem with this problem may be related to precision error. Here is solution by Neilor:

  double highx = (int)((total/n+0.0099)*100);
  double lowx = (int)((total/n)*100);
  highx /= 100;
  lowx /= 100;
  Where total is the total sum of the money and n is the number of students.

  Then, test each student money if is > than highx or < than lowx, accumulate
(student[i]-highx) or (lowx-students[i]), respectively.
  Then, output the variable that have the bigger value.

  不理解为什么可以这样做,也许某天就顿悟了呢?:D   

UVa 10137 & ZOJ 1874 The Trip的更多相关文章

  1. UVa 706 & ZOJ 1146 LC-Display

    题目大意:给你一个数字n和字体大小s,输出数字的液晶显示.直接模拟,代码如下: #include <stdio.h> void draw(int n,int s,int row) { in ...

  2. zoj 1874 水题,输出格式大坑

    Primary Arithmetic Time Limit: 2 Seconds      Memory Limit: 65536 KB Children are taught to add mult ...

  3. 详解OJ(Online Judge)中PHP代码的提交方法及要点【举例:ZOJ 1001 (A + B Problem)】

    详解OJ(Online Judge)中PHP代码的提交方法及要点 Introduction of How to submit PHP code to Online Judge Systems  Int ...

  4. 通过vjudge刷Uva的题目(解决Uva网站打开慢的问题)

    最近在跟着算法竞赛入门经典刷题,发现Uva网站打开超级慢,进个主页面都需要好几秒.后来发现可以通过vjudge网站刷Uva的题目,很是方便,在这mark一下,顺便做一下推荐. vjudge网址:htt ...

  5. ZOJ 1141:Closest Common Ancestors(LCA)

    Closest Common Ancestors Time Limit: 10 Seconds      Memory Limit: 32768 KB Write a program that tak ...

  6. The Trip PC/UVa IDs: 110103/10137, Popularity: B, Success rate: average Level: 1

    #include<cstdio> #include<iostream> #include<string> #include<algorithm> #in ...

  7. POJ 1511 Invitation Cards / UVA 721 Invitation Cards / SPOJ Invitation / UVAlive Invitation Cards / SCU 1132 Invitation Cards / ZOJ 2008 Invitation Cards / HDU 1535 (图论,最短路径)

    POJ 1511 Invitation Cards / UVA 721 Invitation Cards / SPOJ Invitation / UVAlive Invitation Cards / ...

  8. POJ 2289 Jamie's Contact Groups / UVA 1345 Jamie's Contact Groups / ZOJ 2399 Jamie's Contact Groups / HDU 1699 Jamie's Contact Groups / SCU 1996 Jamie's Contact Groups (二分,二分图匹配)

    POJ 2289 Jamie's Contact Groups / UVA 1345 Jamie's Contact Groups / ZOJ 2399 Jamie's Contact Groups ...

  9. UVA 11100 The Trip, 2007 (贪心)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

随机推荐

  1. PHP中使用正则表达式详解 preg_match() preg_replace() preg_mat

    PHP中嵌入正则表达式常用的函数有四个: 1.preg_match() :preg_match() 函数用于进行正则表达式匹配,成功返回 1 ,否则返回 0 . 语法:int preg_match( ...

  2. mvc ChildActionOnly + ActionName的用法

    ChildActionOnly的目的主要就是让这个Action不通过直接在地址栏输入地址来访问,而是需要通过RenderAction来调用它. <a href="javascript: ...

  3. DFS序的题目列表

    所谓dfs序就是将之前的顺序进行修改,获得一个新的序列,然后再新的序列下进行一系列其他的操作 一般题目给你的都会是一棵树,然后点之间都是无关的,我们首要的任务就是先把这些序列重新排.然后再根据dfs的 ...

  4. ASP.NET WEB开发,实现上传图片

    protected void btnUp_Click(object sender, EventArgs e) { Boolean fileOK = false; String path = Serve ...

  5. OpenGL学习--------动画制作

    假设某动画一共有n幅画面,则它的工作步骤就是:显示第1幅画面,然后等待一小段时间,直到下一个1/24秒显示第2幅画面,然后等待一小段时间,直到下一个1/24秒……显示第n幅画面,然后等待一小段时间,直 ...

  6. UIView 面面观

    原创:转载请注明出处 1.UIView: 一个视图对象控制该区域的渲染,同时也控制内容的交互. 2.UIView的功能就是:展示.渲染.交互 3.UIView 和很多其他视图控件的默认tag值是0,所 ...

  7. Android性能优化典范---转

    Android性能优化典范 原文链接:  http://hukai.me/android-performance-patterns/ JAN 17TH, 2015 | COMMENTS 2015新年伊 ...

  8. Naive Bayes在mapreduce上的实现(转)

    Naive Bayes在mapreduce上的实现 原文地址 http://www.cnblogs.com/sunrye/p/4553732.html Naive Bayes是比较常用的分类器,因为思 ...

  9. 我的第一个Android项目之环境搭建

    开发IDE Android Studio2.0 + Genymotion + JDK1.8 网盘地址:http://pan.baidu.com/s/1kUSVqaN Android Studio 我的 ...

  10. JavaScript中call,apply,bind方法的总结

    原文链接:http://www.cnblogs.com/pssp/p/5215621.html why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之 ...