本人有两份代码,请问下为为什么等分不同。
#include <bits/stdc++.h>
#define IOS std::ios::sync_with_stdio(fasle);cin.tie(NULL);cout.tie(NULL)
#define int long long
#define ri register int
#define rep(i,x,y) for(ri i=x;i<=y;i++)
#define rep1(i,x,y) for(ri i=x;i>=y;i--)
#define il inline
#define fire signed
#define pai(a,x,y) sort(a+x,a+y+1)
using namespace std ;
il int qmi(int a,int b) {
int res=1;
while(b) {
if(b&1) res=(res*a);
a=a*a;
b>>=1;
}
return res;
}
void print(int x) {
if(x>=10) print(x/10);
putchar(x%10+'0');
}
#define gcd(x,y) __gcd(x,y)
#define lcm(x,y) x*y/gcd(x,y)
int n;
char c[200100];
const int mod=998244353;
int f[200100];
int s[200100];
fire main() {
// freopen("divide.in","r",stdin);
// freopen("divide.out","w",stdout);
cin>>n>>(c+1);
f[1]=c[1]-'0';
s[1]=f[1];
int sum=(c[1]-'0');
rep(i,2,n) {
sum=sum*10+(c[i]-'0')%mod;
f[i]=((f[i-1]-(int)sum/10)%mod*10)%mod;
f[i]=(f[i]+s[i-1]*(c[i]-'0')%mod+sum)%mod;
s[i]=(s[i-1]+f[i])%mod;
}
print(f[n]);
return false;
}
全错代码
#include <bits/stdc++.h>
#define IOS std::ios::sync_with_stdio(fasle);cin.tie(NULL);cout.tie(NULL)
#define int long long
#define ri register int
#define rep(i,x,y) for(ri i=x;i<=y;i++)
#define rep1(i,x,y) for(ri i=x;i>=y;i--)
#define il inline
#define fire signed
#define pai(a,x,y) sort(a+x,a+y+1)
using namespace std ;
il int qmi(int a,int b) {
int res=1;
while(b) {
if(b&1) res=(res*a);
a=a*a;
b>>=1;
}
return res;
}
void print(int x) {
if(x>=10) print(x/10);
putchar(x%10+'0');
}
#define gcd(x,y) __gcd(x,y)
#define lcm(x,y) x*y/gcd(x,y)
int n;
char c[200100];
const int mod=998244353;
int f[200100];
int s[200100];
fire main() {
// freopen("divide.in","r",stdin);
// freopen("divide.out","w",stdout);
cin>>n>>(c+1);
f[1]=c[1]-'0';
s[1]=f[1];
int sum=(c[1]-'0');
rep(i,2,n) {
f[i]=((f[i-1]-sum)*10)%mod;
sum=sum*10+(c[i]-'0');
f[i]=(f[i]+s[i-1]*(c[i]-'0')+sum)%mod;
s[i]=(s[i-1]+f[i])%mod;
}
print(f[n]);
return false;
}
连份代码就在实现上有一些不同,但是思路一样。