AtCoder Beginner Contest 164 D - Multiple of 2019(数论+dp)

思路

S[l,r]*10^{n-r}=S[l,n]-s[r,n],这意味着s[i,n]%p==s[j,n]%p时候,s[i,j]%p=0。

代码

#include
typedef long long ll;
using namespace std;
ll N,P,cnt[200101],T[200101],ans,mod;

int main()
{
    string s;cin>>s;
    N=s.size();P=2019;
    T[N-1]=1;
    for(int i=N-2;i>=0;i--) T[i]=T[i+1]*10%P;
    cnt[0]=1;
    for(int i=0;i     {
        mod=(mod+(s[i]-'0')*T[i])%P;
        ans+=cnt[mod]++;
        //cout<     }
    cout< }
 

你可能感兴趣的:(AtCoder Beginner Contest 164 D - Multiple of 2019(数论+dp))