织梦如何做几种语言的网站,保险咨询免费,iis新建网站不能访问,今天最新军事新闻视频CF1497E1 Square-free division (easy version)
题意#xff1a;
这是简单版#xff0c;此题中 k0 给出一串长为 n 的序列 a1,a2,a3...ana_1,a_2,a_3...a_na1,a2,a3...an 把它分成尽量少的块使每一块中任意两数的乘积不是一个完全平方数。 输出最少的块数。
题解
这是简单版此题中 k0 给出一串长为 n 的序列 a1,a2,a3...ana_1,a_2,a_3...a_na1,a2,a3...an 把它分成尽量少的块使每一块中任意两数的乘积不是一个完全平方数。 输出最少的块数。
题解
本题是不涉及修改的 其实好想对于所有数质因子分解如果任意两个数的乘积是一个完全平方数两个数的质因子合并后均为偶数个因为偶数个就可以被开方掉说明是平方数 那么我们可以这样对于每个数aia_iai我们对其质因子分解将出现偶数次的质因子删去只保留奇数次的质因子就比如质因子7出现了5次那我们只保留一个质因子7。这样是因为两个数的乘积只需要考虑出现奇数次的情形 这样处理过后的数组a如果存在i,ji,ji,j使得aiaja_ia_jaiaj,那么就说明这两个数会组成完全数不能在一个块内 剩下就好做了直接循环一边对于第二次出现的数就建立新块
代码
// Problem: E1. Square-free division (easy version)
// Contest: Codeforces Round #708 (Div. 2)
// URL: https://codeforces.com/contest/{getProblemIndexes(problemCurrentPageList[i][0])[0]}/problem/E1
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// By Jozky#include bits/stdc.h
#include unordered_map
#define debug(a, b) printf(%s %d\n, a, b);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pairint, int PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll 1e18;
const int INF_int 0x3f3f3f3f;
void read(){};
template typename _Tp, typename... _Tps void read(_Tp x, _Tps... Ar)
{x 0;char c getchar();bool flag 0;while (c 0 || c 9)flag| (c -), c getchar();while (c 0 c 9)x (x 3) (x 1) (c ^ 48), c getchar();if (flag)x -x;read(Ar...);
}
template typename T inline void write(T x)
{if (x 0) {x ~(x - 1);putchar(-);}if (x 9)write(x / 10);putchar(x % 10 0);
}
void rd_test()
{
#ifdef ONLINE_JUDGE
#elsestartTime clock();freopen(data.in, r, stdin);
#endif
}
void Time_test()
{
#ifdef ONLINE_JUDGE
#elseendTime clock();printf(\nRun Time:%lfs\n, (double)(endTime - startTime) / CLOCKS_PER_SEC);
#endif
}
const int maxn 2e5 9;
int a[maxn];
int main()
{//rd_test();int t;read(t);while (t--) {int n, k;cin n k;int tot 0;for (int i 1; i n; i) {cin a[i];int now a[i];for (int j 2; j * j now; j) {int cnt 0;while (now % j 0) {now/ j;cnt;}for (int k 1; k cnt; k)a[i]/ j;if (cnt % 2 1)a[i]* j;}}// for (int i 1; i n; i)// cout a[i] a[i] endl;mapint, int mp;int ans 0;for (int i 1; i n; i) {if (mp[a[i]]) {ans;mp.clear();mp[a[i]] 1;}elsemp[a[i]] 1;}ans;cout ans endl;}return 0;;//Time_test();
}