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

一次AC ,冲AC100 ,发帖留念

Posted by windyrobin at 2008-08-28 17:59:24 on Problem 1060
220K	63MS	C++	2002B
注意 2个 int 1000000 相乘 ,就会整形溢出 ,同理 ,内部运算要设2000容量
重载运算符,+ 和-是一样的,* 就是各个非零位的循环移位相加,重载 << 符号 ,%=
就是当 a 的degree 大于b的degree时 ,a-b<<(a.degree-b.degree) 
实例代码
#define  MAXDEGREE 1000

//for * or << operation ,it should reserver 2*MAXDEGREE
typedef bitset<2*MAXDEGREE+1> bitData;

class MMP
{
private :
	bitData data; 
	int degree ;
public :
	MMP(){
		data.reset();
		degree = 0;
	}
	MMP(const bitData &a ,int aDegree){
		data = a;
		degree = aDegree ;
	}
	MMP(const bitData &a){
		data = a;
		for(int i=2*MAXDEGREE + 1 ;i>=0 ;i--)
			if(1 == data[i])
				degree = i;
	}
	const MMP  operator << (int pos) const{//must add const ,for cosnt mmp only call const fun
		bitData newData ;
		newData.reset();
		int i;
		for(i = degree + pos ;i>=pos ;i--){
			newData[i]= data[i-pos];
		}
		return MMP(newData ,degree+pos) ;
	}
	const MMP operator * (const MMP &a) const{
		MMP newMMP ;
		for(int i=0 ;i<=degree ;i++){
			if(1 == data[i]){
				newMMP += (a<<i) ;
			}
		}
		return newMMP ;
	}
	MMP& operator += (const MMP & a){		
		int mDegree =__max(degree ,a.degree) ;
		int i;
		for(i=0 ;i<=mDegree ;i++){
			data[i] = data[i]^a.data[i] ;
		}
		degree=0;//min degree is 0!!!
		for(i=mDegree ;i>=0 ;i--)
			if(1 == data[i]){
				degree =i;
				break;
			}
		return *this;
	}
	MMP& operator %= (const MMP &a){
		while(degree >= a.degree){
			*this += a<<(degree - a.degree) ;
		}
		return *this ;
	}
	void print() const{
		printf("%d " ,degree+1);
		for(int i=degree ;i>=0 ;i--)
			printf("%d " ,data[i]);
		printf("\n");
	}
};

使用时 :
MMP result = MMP(f ,fn)*MMP(g ,gn) ;
		result %= MMP(h ,hn);
		result.print();
ok了 !

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