首页 > 其他分享 >数组关系_ABC342_D - Square Pair

数组关系_ABC342_D - Square Pair

时间:2024-02-28 22:44:10浏览次数:29  
标签:tmp Square const int ll long ABC342 Pair define

目录

问题概述

原题参考:D - Square Pair
对于长度为n的数组,给出满足要求的数对对数:

  • i < j
  • a[i]*a[j]是一个平方数

思路想法

其实和以前的数组关系那题差不多,也是找关系,就是关系找不出来而已,对于两数相乘为平方数应该怎么考虑,可以知道对于任意数n,存在n = 2a1 + 3a2 + ... + pnan,那么平方数的任意的质因子的幂次放都应该是偶数,因此对于一个数,只要将其所有为奇数的质因子留下来即可,那么数对就是该因子的个数,特别的,对于0,其数对是之前的所有数

参考代码

#include <bits/stdc++.h>
using namespace std;
#define FAST_IO ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define endl '\n'
#define pll pair<long long, long long>
#define pii pair<int, int>
#define vi vector<int>
#define vl vector<long long>
#define ll long long
#define ull unsigned long long
const ll INF = 9187201950435737471;
const int inf = 2139062143;
const ll mod = 1e9 + 7;
const double eps = 1e-6;
const double PI = acos(-1.0);
const int N = 3e5+7;
int a[N], n, tmp;
void solve() {
    cin >> n;
    ll ans = 0;
    for(int i=1; i<=n; i++) {
        cin >> tmp;
        if(!tmp) {
            ans += i - 1;
            a[0] ++;
            continue;
        }
        for(int j=2; j*j <= tmp; j++) {
            int k = j*j;
            while(tmp%k == 0) tmp /= k;
        }
        ans += a[tmp] + a[0];
        a[tmp] ++;
    }
    cout << ans << endl;
}
int main() {
#ifdef xrl
    freopen("in.txt", "r", stdin), freopen("out.txt", "w", stdout);
#endif
    FAST_IO;
    int t = 1;
    //cin >> t;
    while(t --) solve();
#ifdef xrl
    cout << "Time used = " << (double)(clock() * 1.0 / CLOCKS_PER_SEC) << "s";
#endif
    return 0;
}

问题反思

数论,i don‘t like math!数论的问题转化下来老是和质数相关

标签:tmp,Square,const,int,ll,long,ABC342,Pair,define
From: https://www.cnblogs.com/notalking569/p/18042200

相关文章

  • [ABC342D] Square Pair 题解
    洛谷传送门原题传送门题意给出一个数列\(A\),求出满足\(A_iA_j\)为完全平方数的无序数对\((i,j)\)的个数。分析容易想到(但是我在昨晚没想到,可以原地AFO了),对于每个数,如果是\(0\)的话可以直接统计答案(记录\(0\)的个数\(cnt\),最后\(ans\leftarrowans+cnt(n-cnt)+\f......
  • [ABC342E] Last Train 题解
    洛谷传送门原题传送门题意给出一些由\((l,d,k,c,A,B)\)描述的列车,表示每当时间为\(l,l+d,l+2d,\cdots,l+(k-1)d\)时有一半列车从\(A\)出发,经过\(c\)的时间到达\(B\)。问如果从站点\(i,i\in(0,n)\)出发要去站点\(n\),最晚什么时候到达站点\(i\)可以去到站点\(n\)......
  • [ABC342C] Many Replacement 题解
    洛谷传送门原题传送门题意给出由小写字母初始字符串,每次操作将字符串中所有为\(c\)的字符改为\(d\)。输出最终的字符串。分析很明显只需要开一个\(fa\)数组,其中\(fa[i]=j\)表示字母\(i\)被改为了\(j\)。对于每次操作只需要遍历\(26\)个字母,将\(fa[i]=c\)的那些......
  • [ABC342G] Retroactive Range Chmax 题解
    洛谷传送门原题传送门题意维护一个数列,有以下三个操作:区间最值操作,即将\([l,r]\)区间内的\(A_i\)变成\(\max(A_i,v)\)。删除操作操作,即将第\(i\)次操作删除,保证第\(i\)次操作是操作\(1\),且未被删除。注:仅删除第\(i\)次操作,后续操作仍然在。查询,询问当前的......
  • [AGC036F] Square Constraints
    [AGC036F]SquareConstraints更好的阅读体验可以看成是求值域两个半圆间的排列的个数。首先对于每个\(i\)设\(L_i,R_i\)表示\(p_i\)取值的下界和上界。如果没有小圆的限制即没有下界,问题很简单:把\(R\)从小到大排序,然后\(\prod_{i=1}^nR_i-i+1\)即为答案,原因显然,因......
  • At-abc342
    AtCoderBeginnerContest342(已更新:CD)C似曾相识的经典映射题……而只会map的蒟蒻成功又被卡住了简单的用map映射无法处理如r->a,a->r这样的多重映射,应该在先存下原本的信息,再作映射写到这突然悟了……再改改果然是没有悟一点(⊙﹏⊙),由于只处理26个字母,每次修改实时更......
  • ABC342总结
    ABC342总结A+B+C+D虽然有奖,但是一无所获,都排到2000名左右了。赛时快速通过前四题,但是第五题被题目迷惑,第六题思路混乱,第七题本来是能力范围之内(数据结构是chnoier的特长),但是没读题。E一个最短路,这是有提示的,但是有一个迷惑信息。题目让我们求从A最晚出发的时间能到达N,其......
  • [ARC157C] YY Square
    首先考虑权值不算平方这么算,这个很简单,直接dp,设\(f_{i,j}\)是为到点\((i,j)\)结束的路径权值和,那么转移就很简单了加上左边的上边的在加上两个Y所加上的新权。那么平方怎么做,注意到\((a+1)^2=a^2+2a+1\),直接类似的转移,在加上两倍一次权值即可。constintN=2e3+5;......
  • 洛谷题单指南-贪心-P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G
    原题链接:https://www.luogu.com.cn/problem/P1090题意解读:两两合并,是典型的哈夫曼编码算法思想,贪心即可。解题思路:要是合并体力消耗最少,就要让尽可能少的果子越晚合并越好,因此,贪心策略为优先选择数量最少的两堆果子合并,一直到剩下一堆果子,把合并过程中的消耗值累加即可,要快速......
  • 将SquareLine Studio导出的LVGL代码在windows上运行
    1.引入SDL驱动SquareLineStudio导出的LVGL代码后如果要在windows上运行需要引入SDL的驱动,官方导出的代码是没有的,这里提供一个自己在网上找到的SDL2-2.28.1包,解压后放在同一目录下即可2.编写CmakeLists.txt这里提供我这边自己修改的CmakeLists.txtcmake_minimum_required(......