| ||||||||||
| 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 | |||||||||
请大牛指点 难道这么做不对?先按照应得得钱从达到小排序 遇到一个钱数大于0的 找一个钱数为负的,把钱全给他,这样从前到后重复n-1次 肯定最后都是0 难道不对吗
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef struct
{
char name[30];
int mon;
}M;
M m[1011];
int cmp(M a,M b)
{
return a.mon>b.mon;
}
int main()
{
int n,k,t;
while(scanf("%d%d",&n,&k)!=EOF)
{
getchar();
if(n==0&&k==0){ break;}
for(int i=0;i<n;i++)
{
scanf("%s",m[i].name);
m[i].mon=0;
}
for(int i=0;i<k;i++)
{
char s1[30],s2[30];
int mon;
scanf("%s %s %d",s1,s2,&mon);
getchar();
int flag1=0,flag2=0;
for(int j=0;j<n;j++)
{
if(strcmp(m[j].name,s1)==0)
{
m[j].mon-=mon;
flag1=1;
}
if(strcmp(m[j].name,s2)==0)
{
m[j].mon+=mon;
flag2=1;
}
if(flag1&&flag2)
break;
}
}
sort(m,m+n,cmp);
t++;
printf("Case #%d\n",t);
for(int j=0;j<n-1;j++)
{
if(m[j].mon>0)
{
for(int i=j+1;i<n;i++)
{
if(m[i].mon<0)
{
m[i].mon+=m[j].mon;
printf("%s %s %d\n",m[j].name,m[i].name,m[j].mon);
m[j].mon=0;
break;
}
}
}
}
printf("\n");
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator