2021-04-29 Codeforces Round #716 (Div. 2)
作者:互联网
A. Perfectly Imperfect Array
如果输出0,要求每个字串的乘积都要是完全平方数,那么每个数都应该是完全平方数。
有个点要注意,取根号后要把它改为int类型的。
#include <bits/stdc++.h>
using namespace std;
const int N = 110;
typedef long long ll;
typedef pair<int, int> PII;
int t, n;
double a[N];
int main()
{
cin >> t;
while (t -- )
{
cin >> n;
int f = 1;
int i;
for (i = 0; i < n; i ++ ) cin >> a[i];
for (int j = 0; j < n; j ++ )
{
int x = sqrt(a[j]);
if (a[j] != x * x)
{
f = 0;
break;
}
}
if (!f) puts("YES");
else puts("NO");
}
return 0;
}
B. AND 0, Sum Big
由2k-1可以想到将数看作二进制的数,假设一个数组中有n个相等的元素,对于每一位,都需要选择一个元素关掉他的这一位。因此答案为nk.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e9 + 7;
int t, n, k;
int main()
{
cin >> t;
while (t -- )
{
ll ans = 1;
cin >> n >> k;
while (k -- )
{
ans = (ans * n) % N;
}
cout << ans << endl;
}
return 0;
}
C. Product 1 Modulo N
题意:给定一个数n,从1~n - 1个数尽量选取最多的数是他们的乘积取模余1。
res = k * n + 1, 因此,乘积一定与n互质,所以挑选出的每一个数都应与n互质,对于挑选出来的数,他们的成绩可以表示为
k * n +m,m与n互质。因此把乘积除个m即可。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 5;
int vis[N];
int main()
{
int n;
cin >> n;
ll ans = 1;
int sum = 0;
for (int i = 1; i < n; i ++ )
{
if (__gcd(i, n) == 1)
{
vis[i] = 1;
sum ++;
ans = (ans * i) % n;
}
}
if (ans != 1)
{
vis[ans] = 0;
sum --;
}
cout << sum << endl;
for (int i = 1; i < n; i ++ )
if (vis[i]) printf("%d ", i);
return 0;
}
标签:04,int,716,ll,Codeforces,long,cin,--,ans 来源: https://blog.csdn.net/m0_51250458/article/details/116267452