刚刚的D题。
WA1个。
//writer:Oier_szc
#include <bits/stdc++.h>
//#include <windows.h>
#define ED cerr<<endl;
#define TS cerr<<"I AK IOI"<<endl;
#define cr(x) cerr<<x<<endl;
#define cr2(x,y) cerr<<x<<" "<<y<<endl;
#define cr3(x,y,z) cerr<<x<<" "<<y<<" "<<z<<endl;
#define cr4(x,y,z,w) cerr<<x<<" "<<y<<" "<<z<<" "<<w<<endl;
#define pii pair<int,int>
#define fi first
#define se second
#define int long long
//#define uint unsigned long long
using namespace std;
const int N=5e3+5,INF=2e9,mod=998244353;
int n;
int f[65];
int qpow(int a,int b) {
int res=1ll;
//a%=mod;
while(b) {
if(b&1ll) res=res*a%mod;
a=a*a%mod;
b>>=1ll;
}
//cr(res)
return res;
}
signed main()
{
scanf("%lld",&n);
int Log=(int)log10(n)+1,ans=0,pos=0;
int b=qpow(10,Log),c=n%mod;
ans=(1-qpow(b,n)+mod)*qpow(1-b+mod,mod-2)%mod;
//cr((1-qpow(qwq,n)+mod))
printf("%lld\n",ans*c%mod);
return 0;
}
//11
AC:
//writer:Oier_szc
#include <bits/stdc++.h>
//#include <windows.h>
#define ED cerr<<endl;
#define TS cerr<<"I AK IOI"<<endl;
#define cr(x) cerr<<x<<endl;
#define cr2(x,y) cerr<<x<<" "<<y<<endl;
#define cr3(x,y,z) cerr<<x<<" "<<y<<" "<<z<<endl;
#define cr4(x,y,z,w) cerr<<x<<" "<<y<<" "<<z<<" "<<w<<endl;
#define pii pair<int,int>
#define fi first
#define se second
#define int long long
//#define uint unsigned long long
using namespace std;
const int N=5e3+5,INF=2e9,mod=998244353;
int n;
int f[65];
int qpow(int a,int b) {
int res=1ll;
while(b) {
if(b&1ll) res=res*a%mod;
a=a*a%mod;
b>>=1ll;
}
return res;
}
signed main()
{
scanf("%lld",&n);
int Log=0,x=n;
while(x) {
x/=10;
++Log;
}
int ans=0,pos=0;
int b=qpow(10,Log),c=n%mod;
ans=(1-qpow(b,n)+mod)*qpow(1-b+mod,mod-2)%mod;
printf("%lld\n",ans*c%mod);
return 0;
}
可以发现的是将log10改掉就过了。
是否是精度误差还是其它原因。
这可能是一个不太聪明的问题,轻喷。