Atcoder abc 164 D题解

解析
A B C D 余数都相同,可以组合成被2019整除的数有6个
AB,AC,AD,
BC,BD,
CD
(4-1+1)(4-1)/2=6个
特别注意,余数是0的统计数量dp[0]
(dp[0]+1)/2
代码:

#include
#include
#include 
#include
#include
#include
#include
#include
#include
#include
#include 
#define ll long long
using namespace std;
char a[200005];
int dp[3000];
int mod=2019;
ll sum;
int main()
{
    cin>>a;
    int n=strlen(a);
    int ans=0,y=1;
    for(int i=n-1;i>=0;i--)
    {
        ans=(ans+(a[i]-'0')*y)%mod;
        y=y*10%mod;
        dp[ans]++;
    }
    for(int i=1;i<2019;i++)
    {
        if(dp[i]>1)
        {
            sum+=(ll)dp[i]*(dp[i]-1)/2;
        }
    }
    sum+=dp[0]*(dp[0]+1)/2;
        cout<<sum<<endl;
    return 0;
}

你可能感兴趣的:(Atcoder)