1019. 程序猿和产品狗

在公司里面,程序猿经常有一堆todolist要做,而这些todolist是产品经理分配给他们的。但是当程序员遇到不懂技术的产品狗时,就悲剧了。产品经理经常修改他们的todolist,比如:添加,减少他们的todolist。
请设计一个类CodeMonkey ,表示程序猿,另一个类ProductDog,表示产品经理。

  • CodeMonkey类有私有成员 name,todolist。构造函数初始化姓名和todolist,公有函数 int sizeof_todolist(), 来自ProductDog类的友元函数 add_todolist(CodeMonkey&,int),reduce_todolist(CodeMonkey& , int);
  • ProductDog类有公有函数 add_todolist(CodeMonkey&,int),reduce_todolist(CodeMonkey& , int)

Input Specification

每个测试文件包含一组测试用例,对于每个测试用例,第一行输入 n (1<= n <= 10^6)表示有n个程序员,接下去n行,每行为: name x 表示名为name的程序员的todolist的长度为x。 接下去一行 m (1<=m<=10^6),表示产品经理分配任务的次数。 接下去m行,每行为 name opt x , opt 为 0 表示名为name的程序猿的todolist增加x,opt为 1 表示减少x。 输入数据保证合法性。

Output Specification

对于每个程序员,请输出 name x,x表示最终的todolist长度。按输入顺序输出。

Sample Input:

3
Jack 1
Luck 2
Tom  3
4
Tom   0 100
Luck  0 50
Jack  0 25
Tom   1 50
Sample Output:
Jack  26
Luck  52
Tom   53

 
 
 
 
 
时间限制
1000 ms
内存限制
65536 kB
代码长度限制
8192 B
判题程序
Standard
作者
etaf
来源
友元


 
 
#include<iostream>
#include<iomanip>
#include<string>
using namespace std;
class Product;
class CodeMonkey;
class ProductDog
{
  public:  
    void creat(CodeMonkey *,int ,int);  
    void add_todolist(CodeMonkey &,int);  
    void reduce_todolist(CodeMonkey &,int);
};
class CodeMonkey
{  friend void ProductDog::creat(CodeMonkey *,int ,int);
  friend void ProductDog::add_todolist(CodeMonkey &,int);
  friend void ProductDog::reduce_todolist(CodeMonkey &,int);
  friend void Qsort(CodeMonkey*,int,int);
  private :  
    string name;  
    int todolist,sign;
  public:  int turn_sign()  
      {    return sign;  }    
      string turn_name()  {    return name;  }  
      void cout_todolist()  {    cout<<name<<" "<<todolist<<endl;  }
      void creat(int len)  {    cin>>name>>todolist;      sign=len;  }
};
void ProductDog::add_todolist(CodeMonkey &b,int todolist)
{    
  b.todolist=b.todolist+todolist;
}
void ProductDog::reduce_todolist(CodeMonkey &b,int todolist)
{    
  b.todolist=b.todolist-todolist;
}
void ProductDog::creat(CodeMonkey *b,int n,int len)
{
  int a,front,len2,sign,todolist;
  string name;  
  while(n--)  
  {    
    front=0;
    len2=len;
    a=len/2;    
    cin>>name;    
    do{      
      if(b[a].name<name)
      {      
        front=a;      
      }else      
      {        
        len2=a;  
      }      
        a=(front+len2)/2;    
    }while(b[front].name!=name&&b[len2].name!=name);      
    if(b[front].name==name)
      a=front;
      else 
        a=len2;
    cin>>sign>>todolist;
    if(sign==0)add_todolist(b[a],todolist);
      if(sign==1)reduce_todolist(b[a],todolist);  
  }
}
template <typename T>
void swap(T *m,T *n)
{  
  T temp;  
  temp=*m;  
  *m=*n;  
  *n=temp;
}
void Qsort(CodeMonkey *a,int l,int r)
{  
  int i,j;  
  string name;  
  i=l;  
  j=r;  
  name=a[i].name;  
  do{    
    while(i<=j&&a[j].name>name)
      j--;    
    while(i<=j&&a[i].name<name)
      i++;    
    if(i<=j)
    {      
      swap(&a[i].name,&a[j].name);
      swap(&a[i].todolist,&a[j].todolist);
      swap(&a[i].sign,&a[j].sign);
      i++;    
      j--;    
    }  
  }while(i<=j);  
  if(l<j)Qsort(a,l,j);  
  if(i<r)Qsort(a,i,r);
}
CodeMonkey CM[1000000];
int main()
{  
  ProductDog PD;
  int n,add1,add,add2;
  cin>>n;
  add1=0;  
  while(add1<n)    
  {      
    CM[add1].creat(add1);    
    add1++;    
  }    
  Qsort(CM,0,add1-1);    
  cin>>n;    
  PD.creat(CM,n,add1-1);    
  add=0;    
  for(;add<add1;add++)  
  {      
    for(add2=0;add2<add1;add2++)      
    { 
      if(add==CM[add2].turn_sign())        
        CM[add2].cout_todolist();      
    }    
  }  
  return 0;
}



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值