题解:CF1899D Yarik and Musical Notes
· 阅读需 1 分钟
原题链接
题意简述
求数列中有多少对 ,设 ,满足 。()
解题思路
用 Desmos 作出 的图像:
不难发现只有 或 时等式成立。()
统计每个 出现次数,记为 ,然后对 分类讨论:
- ,选一个 和一个 ,方案数为 ;
- ,在所有的 中选两个,方案数为 。
所以总方案数为 。
参考代码
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
cin>>T;
while(T--)
{
int n;
cin>>n;
map<int,ll> m;
for(int i=1;i<=n;i++)
{
int t;
cin>>t;
m[t]++;
}
ll ans=m[1]*m[2];
for(auto x:m)
{
ans+=x.second*(x.second-1)/2;
}
cout<<ans<<'\n';
}
return 0;
}