题解
2024-05-06 13:08:21
发布于:广东
68阅读
0回复
0点赞
讲个笑话,小码王那边正确解法是用ChatGPT做的,当时我们整整笑了一节课
首先看到数据,我们就得知道暴力for是不可行的
实际上这道题并不难,只要搞清楚方法就易如反掌
我们把所有数对2024取余,装进桶里
这样每个桶的数据取任意两个的差的绝对值都是2024的倍数!
最后再求一下每个桶的组合数加起来就行了
#include <iostream>
#include <cstdio>
using namespace std;
long long bucket[100005];
int main(){
int n, x;
cin >> n;
for(int i = 1; i <= n; i++){
cin >> x;
bucket[x % 2024]++;
}long long ct = 0;//2*10^5的数据,开longlong!!!
for(int i = 0; i <= 2023; i++){
ct += bucket[i] * (bucket[i] - 1) / 2;//每个桶满足条件的组合数
}cout << ct;
return 0;
}
时间复杂度:
全部评论 3
我自己摸索出来方法还对了。
2024-07-31 来自 浙江
0(就是太史山了。)
#include <bits/stdc++.h> using namespace std; long long a[1000005]; long long b[1000005]; int main(){ long long n,cnt=0; cin >> n; for(long long i=1;i<=n;i++){ cin >> a[i]; } sort(a+1,a+n+1); for(long long i=1;i<=n;i++){ long long x=a[i]; if(b[i]>0){cnt+=b[i];continue;} long long k=0; for(long long j=i+1;j<=n;j++){ if((a[j]-x)%2024==0){ if(b[j]==0){ k++; b[j]+=k;//标记 } } } } cout << cnt; return 0; }
2024-07-31 来自 浙江
0有点看不懂(
2024-08-01 来自 湖南
0
6
2024-05-08 来自 广东
0对笑死我了,跟我一样
2024-05-08 来自 广东
0
有帮助,赞一个