列表

详情


NC231414. DoubleSum

描述

给定一个长度为 n 的序列 a 和常数 c ,你需要求:



其中:



输入描述

第一行两个正整数,n,c

第二行 n 个非负整数为 a_i.

输入数据保证 a_i 两两不同。


输出描述

一行,一个整数,为答案。

示例1

输入:

2 3
123 852

输出:

12

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 135ms, 内存消耗: 4488K, 提交时间: 2021-12-18 19:39:52

#include<bits/stdc++.h>
#define ll long long
#define mo 998244353
using namespace std;

ll m,c,ans;
int a[100005];
unordered_map<ll,int> ma;
int main(){
	int n;
	cin>>n>>c;
	for (int i=1;i<=n;i++) scanf("%d",&a[i]);
	for (ll m=c;m<=1e9;m*=c){
		ma.clear();
		for (int i=1;i<=n;i++){
			int v=a[i]%m;
			ans+=ma[v];
			ma[v]++;
		}
	}
	cout<<ans*2;
}

Python3 解法, 执行用时: 1434ms, 内存消耗: 22436K, 提交时间: 2021-12-18 22:50:04

n, c = map(int, input().strip().split())
alist = list(map(int, input().strip().split()))
#alist.sort()
p = c
res = 0
while True:
    modDict = {}
    for num in alist:
        res += modDict.get(num%p, 0)
        modDict[num%p] = modDict.get(num%p, 0) + 1
    if p * c > 1e9: break
    p *= c
print(res * 2)

上一题