提交记录 9641


用户 题目 状态 得分 用时 内存 语言 代码长度
hqztrue 1004a. 【模板题】高精度乘法2 Time Limit Exceeded 0 1 s 508 KB C++ 2.35 KB
提交时间 评测时间
2019-06-23 22:29:52 2020-08-01 01:44:42
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<vector>
#include<bitset>
using namespace std;
#define N 40000
typedef bitset<N> Bint;
bool operator <(const Bint &a,const Bint &b){
	for (int i=a.size()-1;i>=0;--i)
		if (a[i]!=b[i])return a[i]<b[i];
	return 0;
}
bool operator >(const Bint &a,const Bint &b){
	for (int i=a.size()-1;i>=0;--i)
		if (a[i]!=b[i])return a[i]>b[i];
	return 0;
}
bool operator <=(const Bint &a,const Bint &b){return !(a>b);}
bool operator >=(const Bint &a,const Bint &b){return !(a<b);}
Bint operator +(const Bint &a,const Bint &b){return b.any()?(a^b)+((a&b)<<1):a;}
Bint& operator +=(Bint &a,const Bint &b){return a=a+b;}
Bint operator -(const Bint &a){return Bint(1)+~a;}
Bint operator -(const Bint &a,const Bint &b){return a+(-b);}
Bint& operator -=(Bint &a,const Bint &b){return a=a-b;}
Bint operator *(Bint a,Bint b){
	Bint r(0);
	for (;b.any();b>>=1,a<<=1)
		if (b[0])r+=a;
	return r;
}
Bint& operator *=(Bint &a,const Bint &b){return a=a*b;}
pair<Bint,Bint> divide(Bint a,const Bint &b){
	Bint c=0; int i=0;
	while (b<<(i+1)<=a)++i;
	for (;i>=0;--i)
		if (a>=(b<<i))a-=b<<i,c.set(i,1);
	return make_pair(c,a);
}
Bint operator /(const Bint &a,const Bint &b){return divide(a,b).first;}
Bint& operator /=(Bint &a,const Bint &b){return a=a/b;}
Bint operator %(const Bint &a,const Bint &b){return divide(a,b).second;}
Bint& operator %=(Bint &a,const Bint &b){return a=a%b;}
inline void read(Bint &x){
	char ch;int bo=0; x=0;
	for (ch=getchar();ch<'0'||ch>'9';ch=getchar())if (ch=='-')bo=1;
	for (;ch>='0'&&ch<='9';x=(x<<3)+(x<<1)+(ch-'0'),ch=getchar());
	if (bo)x=-x;
}
/*inline void print1(Bint x){
	vector<int> c;
	const Bint M=1000000000;
	do {
		pair<Bint,Bint> t=divide(x,M);
		c.push_back(t.second.to_ulong());
		x=t.first;
	}while (x.any());
	printf("%d",c[c.size()-1]);
	for (int i=c.size()-2;i>=0;--i)printf("%09d",c[i]);
	printf("\n");
}*/
inline void print(Bint x){
	vector<Bint> v;
	if (x==0)printf("0");
	for (Bint y=1;y<=x;y*=10)v.push_back(y);
	for (int i=v.size()-1;i>=0;--i){
		int t=0;
		while (x>=(v[i]<<2))x-=v[i]<<2,t+=4;
		while (x>=(v[i]<<1))x-=v[i]<<1,t+=2;
		while (x>=v[i])x-=v[i],++t;
		printf("%d",t);
	}
	printf("\n");
}
int main()
{
	//freopen("1.in","r",stdin);
	//freopen("1.out","w",stdout);
	Bint a,b; read(a); read(b);
	a*=b; print(b);
	return 0;
}



CompilationN/AN/ACompile OKScore: N/A

Testcase #11 s508 KBTime Limit ExceededScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2026-04-03 22:46:32 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠