求条ABC357D
  • 板块学术版
  • 楼主XP3301_Pipi
  • 当前回复10
  • 已保存回复10
  • 发布时间2024/6/8 21:53
  • 上次更新2024/6/8 23:00:02
查看原帖
求条ABC357D
1066579
XP3301_Pipi楼主2024/6/8 21:53

求条ABC357D,类似于快速幂,最后一个样例过不了

#include<bits/stdc++.h>
#define ll long long
#define int long long
#define pii pair<int,int>
#define pll pair<ll,ll>
using namespace std;
const int N=2e5+15;
const int IINF=0x3f3f3f3f;
const long long LINF=0x3f3f3f3f3f3f3f3fll;

inline void FileIO(){
	freopen(".in","r",stdin);
	freopen(".out","w",stdout);
}

template<typename Type>
inline void read(Type& res){
	Type f=1,x=0; char c=' '; while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}
	while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=getchar();
	res=x*f;
}

ll n,m;
const ll mod=998244353;
ll ans;
map<ll,ll> mp;

ll QuickPow(ll a,ll b){
	ll res=1;
	while(b){
		if(b&1) res=res*a%mod;
		b>>=1;
		a=a*a%mod;
	}
	return res;
}

ll Solve(ll x){
	ll res=0,y=x,lst=0,cnt=0;
	while(y){
		if(y&1){
			res=(QuickPow(10,m*lst)*x%mod+res)%mod;
			lst=(1ll<<cnt);
		}
		y>>=1;
		x=(QuickPow(10,m*(int)(log10(x)+1))*x%mod+x)%mod;
		cnt++;
	}
	return res;
}

signed main(){
	read(n);
	ll res=n;
	for(int i=1;i<=19;i++){
		if(res) m=i;
		res/=10;
	}
//	printf("M=%lld\n",m);
	printf("%lld\n",Solve(n));
	return 0;
}



//1000000000000000000
2024/6/8 21:53
加载中...