1019. 程式猿和產品狗
阿新 • • 發佈:2019-01-04
在公司裡面,程式猿經常有一堆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
時間限制 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; }