Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

看错题了,是从X到X+Y不是到Y。。。又贡献一次哇

Posted by KatrineYang at 2016-11-17 07:26:32 on Problem 1526
#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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator