USACO Greedy Gift Givers

//考察点: 结构体
//思路: 简单模拟  注意要先减掉准备分配出去的钱 然后再把余下的加回来
//提交情况: 1AC
//收获: p->mon+=mon/nf;是错误的写法  mon变成未定义的东西了 如果要更新 p->mon 应该写成 p->mon=p->mon+p->mon/nf;
//经验: 以后编程的时候要注意结构体的使用
//ACcode:
/*
ID: qiuqiyu1
PROB: gift1
LANG: C++
*/
#include
< stdio.h >
#include
< string .h >
typedef 
struct  element
{
    
char  nam[ 20 ];
    
int  mon;
}node;

node
*  find(node memlist[], int  memlist_len, char  nam_cnt[])
{
    
int  i;
    
int  n = memlist_len;
    node 
* a = memlist;
    
char   * b = nam_cnt;
    
for (i = 0 ;i < n;i ++ )
    {
        
if (strcmp(b,a[i].nam) == 0 return   & a[i];
    }
    
return  NULL; //  if not found
}

void  dis_gift(node memlist[], int  memlist_len,  char  nam[])
{
    
char  nam_f[ 20 ];
    
int  nm,nf;
    
int  n = memlist_len,i;
    node 
* p, * a = memlist;

    
// scanf("%s",nam);
    scanf( " %d%d " , & nm, & nf);
    p
= find(a,n,nam);
    (p
-> mon) -= nm;
    
if (nf != 0 )(p -> mon) += (nm % nf);
    
for (i = 0 ;i < nf;i ++ )
    {
        scanf(
" %s " ,nam_f);
        p
= find(a,n,nam_f);
        (p
-> mon) += ( int )(nm / nf);
    }
}

int  main()
{
    freopen(
" gift1.in " , " r " ,stdin);
    
// freopen("gift1.out","w",stdout);
    node a[ 10 ];
    
int  n,i;
    
char  nam[ 20 ];
    scanf(
" %d " , & n);
    
for (i = 0 ;i < n;i ++ )
    {
        scanf(
" %s " ,a[i].nam);
        a[i].mon
= 0 ;
    }
    
for (i = 0 ;i < n;i ++ )
    {
        scanf(
" %s " ,nam);
        dis_gift(a,n,nam);
    }
    
for (i = 0 ;i < n;i ++ )
    {
        printf(
" %s %d\n " ,a[i].nam,a[i].mon);
    }
    
return   0 ;
}

你可能感兴趣的:(USACO Greedy Gift Givers)