Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:看错题了,是从X到X+Y不是到Y。。。又贡献一次哇In Reply To:看错题了,是从X到X+Y不是到Y。。。又贡献一次哇 Posted by:KatrineYang at 2016-11-17 07:26:32 > #include <stdio.h> > #include <iostream> > #include <cstdlib> > #include <cstring> > #include <vector> > #include <algorithm> > > using namespace std; > > struct rule{ > int src; > int dest; > int beg; > int end; > }byBeg[110], byEnd[110]; > > void print(int n){ > if(n<10) printf("000"); > else if(n<100) printf("00"); > else if(n<1000) printf("0"); > printf("%d",n); > } > > bool cmpBeg(const rule& r1, const rule& r2){ > return r1.beg < r2.beg; > } > > bool cmpEnd(const rule& r1, const rule& r2){ > return r1.end < r2.end; > } > > int target[10000]; > int rNum; > > void init(){ > for(int i = 0; i < 10000; i++){ > target[i] = 0; > } > rNum = 0; > } > > int mn(int x, int y){return (x<y)? x: y;} > > int main(){ > printf("CALL FORWARDING OUTPUT\n"); > int n; > scanf("%d",&n); > for(int ii = 1; ii <= n; ii++){ > printf("SYSTEM %d\n",ii); > init(); > int src, beg, end, dest; > while(1){ > //cout << "hehe" << endl; > scanf("%d",&src); > //cout << src << endl; > if(!src) { break;} > scanf("%d%d%d",&beg, &end, &dest); > byBeg[rNum].src = src, byBeg[rNum].beg = beg, byBeg[rNum].end = beg+end+1, byBeg[rNum].dest = dest; > byEnd[rNum] = byBeg[rNum]; > rNum++; > } > //cout << "hehe" << endl; > sort(byBeg, byBeg+rNum, cmpBeg); > sort(byEnd, byEnd+rNum, cmpEnd); > int begPos = 0, endPos = 0; > int jd = -1; > while(1){ > int sj, call; > scanf("%d",&sj); > if(sj==9000) break; > scanf("%d",&call); > jd++; > while(jd <= sj){ > int nextJd = sj+1; > if(begPos < rNum) nextJd = mn(nextJd, byBeg[begPos].beg); > if(endPos < rNum) nextJd = mn(nextJd, byEnd[endPos].end); > if(nextJd == sj+1) break; > jd = nextJd; > while(endPos < rNum && byEnd[endPos].end == jd){ > target[byEnd[endPos].src] = 0; > endPos++; > } > while(begPos < rNum && byBeg[begPos].beg == jd){ > target[byBeg[begPos].src] = byBeg[begPos].dest; > begPos++; > } > } > jd = sj; > int dest = target[call]; > if(dest == 0) dest = call; > else{ > bool cycle = 0; > while(target[dest] != 0){ > dest = target[dest]; > if(dest == call){ > cycle = 1; > break; > } > } > if(cycle) dest = 9999; > } > printf("AT "); > print(sj); > printf(" CALL TO "); > print(call); > printf(" RINGS "); > print(dest); > printf("\n"); > } > } > printf("END OF OUTPUT\n"); > return 0; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator