Usaco 1.1.2 贪婪的送礼者(Greedy Gift Givers)

来源:互联网 发布:淘宝保证金骗局 编辑:程序博客网 时间:2024/05/18 00:49

题目:

 贪婪的送礼者

来源:

 Usaco1.1.2

题目大意:

 有N个人,每个人会把自己手里的钱平均送给自己想送的人,也会收到一些人送的  钱,按最后送出和获得的差值由大到小输出人名和值

数据范围:

 每个字符串不超过6个字符

样例:

 5
 dave
 laura
 owen
 vick
 amr
 dave
 200 3
 laura
 owen
 vick
 owen
 500 1
 dave
 amr
 150 2
 vick
 owen
 laura
 0 2
 amr
 vick
 vick
 0 0
dave 302
laura 66
owen -359
vick 141
amr -150
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

做题思路:

 别想别的,模拟就好,每个人以0 0结尾的,把送出的钱和收到的分开记,这算贪心     吧,姑且这么算着了

知识点:

 模拟、贪心

{ID:Dount NamelessTASK:gift1LANG:PASCAL}type node=record s:string; data:longint; money:longint; end;var a:array[0..11]of node; n,i,j,m,num,k,t:longint; s:string; begin assign(input,'gift1.in');reset(input); assign(output,'gift1.out');rewrite(output); readln(n); fori:=1 to n do readln(a[i].s); fori:=1 to n do begin  readln(s);  for j:=1 to n do   if s=a[j].s then t:=j;{<查找这个人>}  readln(num,m);   ifm<>0 then{<有钱才能送呢>}  a[t].money:=(num div m)*m{<这里记录的是送出的,不是自己当时拥有的>}  else a[t].money:=0;  for j:=1 to m do   begin    readln(s);    for k:=1 to n do     if a[k].s=s then inc(a[k].data,num div m);{<收到的钱>}   end; end; fori:=1 to n do begin  writeln(a[i].s,' ',a[i].data-a[i].money);{<差值>} end; close(input);close(output);end.
题目来源:http://ace.delos.com/usacoprob2?a=RexmW8CclSt&S=gift1

原创粉丝点击