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

竟然WA了三次,贴代妈

Posted by KatrineYang at 2016-06-09 22:24:51 on Problem 1033
在我的代妈里面prev和next数组分别存放循环或链表的下一个值。。。先是发现了一个小bug就是如果一次中调整的是链表那么空闲值kong可能发生变化,最好的方法是把kong更新到上一次链表的末端;然后是更弱智的一个bug,判断空闲的标准是prev[i]==0而不是next[i]==0。。。WA这么多次真是冤枉


//============================================================================
// Name        : main1033.cpp
// Author      : 
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
using namespace std;

class node{
public:
	int value;
	node *prev;
	node *next;
	node(int v): value(v){
		prev = NULL;
		next = NULL;
	}
	~node(){
		if(next != NULL) delete next;
		delete this;
	}
};

class dq{
public:
	node *head;
	node *tail;
	dq(node *n){
		head = n;
		tail = n;
	}
	dq(int v){
		node *n = new node(v);
		head = n;
		tail = n;
	}
	void addHead(node *n){
		head->prev = n;
		n->next = head;
		head = n;
	}
	void addTail(node *n){
		tail->next = n;
		n->prev = tail;
		tail = n;
	}
	void addHead(int v){
		node *n = new node(v);
		addHead(n);
	}
	void addTail(int v){
		node *n = new node(v);
		addTail(n);
	}
	~dq(){
		delete head;
	}
};


int main() {
	int N, K;
	cin >> N >> K;
	int cnt = 1;
	int sum = 0;
	int next[10001] = {0};
	int prev[10001] = {0};
	bool state[10001] = {false};
	for(int i = 0; i < K; i++){
		int gs;
		cin >> gs;
		sum += gs;
		for(int j = 0; j < gs; j++){
			int temp;
			cin >> temp;
			next[cnt] = temp;
			prev[temp] = cnt;
			cnt++;
		}
	}
	int kong;
	for(int i = N; i >= 1; i--){
		if(prev[i] == 0){
			kong = i;
			break;
		}
	}
	/*
	for(int i = 1; i <= N; i++){
		cout << next[i] << " ";
	}
	cout << endl;
	for(int i = 1; i <= N; i++){
		cout << prev[i] << " ";
	}*/
	cnt = 0;
	for(int i = 1; i <= sum; i++){
		if(state[i]) continue;
		state[i] = true;
		if(next[i] == i){
			cnt++;

			continue;
		}/*
		cout << i << endl;
		for(int i = 1; i <= sum; i++){
			cout << state[i] << " ";
		}
		cout << endl;*/
		int j = i;
		dq *DQ = new dq(i);
		while(next[j] != 0 && next[j] != i){

			j = next[j];
			state[j] = true;
			DQ->addTail(j);
		}
		if(next[j] == i){
			cout << DQ->head->value << " " << kong << endl;
			node *iter = DQ->head;
			while(iter->next != NULL){
				cout << iter->next->value << " " << iter->value << endl;
				iter = iter->next;
			}
			cout << kong << " " << DQ->tail->value << endl;
		}
		else{
			int k = i;
			while(prev[k] != 0){
				k = prev[k];
				state[k] = true;
				DQ->addHead(k);
			}
			node *iter = DQ->head;
			while(iter->next != NULL){
				cout << iter->next->value << " " << iter->value << endl;
				iter = iter->next;
			}
			kong = iter->value;
		}
	}
	if(cnt == sum) cout << "No optimization needed" << endl;
	//cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
	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