专栏文章
题解:CF1029D Concatenated Multiples
CF1029D题解参与者 7已保存评论 9
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 9 条
- 当前快照
- 1 份
- 快照标识符
- @mioyottt
- 此快照首次捕获于
- 2025/12/03 03:19 3 个月前
- 此快照最后确认于
- 2025/12/03 03:19 3 个月前
首先拼接后的数字可以表示成:
其中 。
注意到其对 取模后等价于:
左右两边互不影响,可以对于每一个数字枚举 预处理左边扔进桶里。
然后将每个数字代入右边,算出 后在桶里进行查询即可。
做完了。
CPP#include<bits/stdc++.h>
#include<bits/extc++.h>
#define int long long
using namespace std;
__gnu_pbds::cc_hash_table<int,int>mp[15];
int a[200005],b[200005],c[200005];
int ans;
signed main(){
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
int g=a[i];
while(g){
b[i]++;
g/=10;
}
// cout<<b[i]<<' ';
for(int j=10%k,e=1;e<=10;e++,j=j*10%k){
mp[e][a[i]%k*j%k]++;
if(b[i]==e)c[i]=a[i]%k*j%k;
}
a[i]%=k;
}
for(int i=1;i<=n;i++)
ans+=mp[b[i]][(k-a[i])%k]-((k-a[i])%k==c[i]);
cout<<ans;
return 0;
}
相关推荐
评论
共 9 条评论,欢迎与作者交流。
正在加载评论...