万位压位高精--求救
  • 板块学术版
  • 楼主Zxsoul
  • 当前回复12
  • 已保存回复12
  • 发布时间2021/5/23 07:42
  • 上次更新2023/11/4 22:51:28
查看原帖
万位压位高精--求救
230808
Zxsoul楼主2021/5/23 07:42

题目 P7113 [NOIP2020] 排水系统

下面是一个我看不懂的压位高精,有大佬可以给个注释或者分享一下不错的压位高精博客吗,qwqqwq

代码如下:

const int base = 1e9;
struct Data
{
	ll a[5];
	Data(void){ a[0] = a[1] = a[2] = a[3] = a[4] = 0;}
	Data(ll x){ a[0] = x % base; a[1] = x / base; a[2] = a[3] = a[4] = 0;}
	inline Data operator + (const Data oth) const
	{
		Data res = *this;
		for(int i=0; i<5; ++i)
		{
			res.a[i] += oth.a[i];
			if(res.a[i] >= base)
				res.a[i] -= base,
				++res.a[i+1];
		}
		return res;
	}
	inline Data operator * (const int x) const// x < base
	{
		Data res = *this;
		for(int i=0; i<5; ++i) res.a[i] *= x;
		for(int i=0; i<5; ++i)
			res.a[i+1] += res.a[i] / base,
			res.a[i] %= base;
		return res;
	}
	inline Data operator / (const int x) const
	{
		Data res;
		ll lst = 0;
		for(int i=4; i>=0; --i)
		{
			lst = lst * base + a[i];
			res.a[i] = lst / x;
			lst %= x;
		}
		return res;
	}
	inline void print(char c = 0) const
	{
		bool flag = 0;
		for(int i=4; i>=0; --i)
		{
			if(flag) printf("%09d",(int)a[i]);
			else if(a[i]) printf("%d",(int)a[i]), flag = 1;
		}
		if(!flag) printf("0");
		putchar(c);
	}
	inline int mod(int x) const
	{
		if(x==2 || x==5) return a[0] % x;
		int res = 0;
		for(int i=0; i<5; ++i) res = res + a[i] % 3;
		return res % 3;
	}
};

Data val[MAXN];

本题的全部代码这里

2021/5/23 07:42
加载中...