今天做的程序猿那题
在公司里面,程序猿经常有一堆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 50Sample Output:
Jack 26 Luck 52 Tom 53
#include <iostream> #include <string> #include <map> using namespace std; //#define N 101 //class CodeMonkey; //注意要先声明 //class ProductDog{ //public: // void add_todolist(CodeMonkey&,int); // void reduce_todolist(CodeMonkey& , int); //}; // //class CodeMonkey{ //private: // // string name; // int todolist; // //public: // map<string,int> mymap; // CodeMonkey(){name="a",todolist=0;} // string getName(){ // return name; // } // int getTodo(){ // return todolist; // } // int sizeof_todolist(); // friend void ProductDog::add_todolist(CodeMonkey&,int); // friend void ProductDog::reduce_todolist(CodeMonkey& , int); // void setName(string s){ // name=s; // } // void setTodolist(int s){ // todolist=s; // } //}; //void ProductDog::add_todolist(CodeMonkey &monkey,int change) //{ // int s=monkey.getTodo(); // monkey.setTodolist(s+change); //} //void ProductDog::reduce_todolist(CodeMonkey &monkey,int change) //{ // int s=monkey.getTodo(); // monkey.setTodolist(s-change); //} int main() { // ProductDog dog; int n,m; //// CodeMonkey coder; map<string,int>mymap; string aname[100000]; //hash_map<string,int> myhacs_map; string name; int todo; cin>>n; typedef pair<string,int> my_pair; for(int i=0;i<n;i++){ cin>>name>>todo; aname[i]=name; mymap.insert(my_pair(name,todo)); } cin>>m; string myname; int judge,change; while(m--){ cin>>myname; cin>>judge>>change; if(judge==0){ mymap.find(myname)->second+=change; } else if(judge==1){ mymap.find(myname)->second-=change; } } for(int i=0;i<n;i++){ string ss=mymap.find(aname[i])->first; int dd=mymap.find(aname[i])->second; cout<<ss<<" "<<dd<<endl; } return 0; }
主体先用string数组存 题目要求按插入顺序输出
有人说可以采用<string,int,cmp>通过改变cmp的算法去让map按原来序列输出,这是不可取的,这样会破坏map的find的函数
总的来说,如果想find 就别想不排序 通过平衡二叉树实现的要排序
以上纯属个人看法,欢迎讨论~
原帖: http://blog.csdn.net/u011644423
版权声明:本文为博主原创文章,未经博主允许不得转载。