USACO 1.1.2 Greedy Gift Givers

USACO 1.1.2 Greedy Gift Givers
题意:每个人都准备一些钱平均分给其他人,不能分的部分留给自己,计算每个人的得失。

分析:使用两个数组,一个计算得,一个计算失,result[i] = receive[i] - give[i]

PS: 用Map更简单些。

/**/ /*
ID: lorelei3
PROG: gift1
LANG:C++
*/


#include 
< fstream >
#include 
< string >

using   namespace  std;

const   int  NP  =   15 ;

string  names[NP];
int  recieved[NP];
int  gived[NP];
int  np;

inline 
int   find( string  s) {
    
for(int i=0; i<np; ++i)
        
if(s == names[i])
            
return i;
    
return -1;
}


int  main() {

    
//init
    int i;
    ifstream 
in("gift1.in");
    ofstream 
out("gift1.out");
    
in>>np;
    
for(i=0; i<np; i++)
        
in>>names[i];

    
//solve
    for(i=0; i<np; i++){
        
string name;
        
int sum ,n;
        
in>>name>>sum>>n;
        
if(n==0)
            
continue;
        
int give = sum/n, stay = sum%n;
        
int loc = find(name);
        recieved[loc] 
+= stay;
        gived[loc] 
+= sum;
        
for(int j=0; j<n; ++j){
            
in>>name;
            recieved[find(name)] 
+= give;
        }

    }

    
    
//output
    for(i=0; i<np; ++i)
        
out<<names[i]<<" "<<recieved[i] - gived[i]<<endl;

    
return 0;
}

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