其他分享
首页 > 其他分享> > Codeforces Round #716 (Div. 2) ABC

Codeforces Round #716 (Div. 2) ABC

作者:互联网

https://codeforces.com/contest/1514

A. Perfectly Imperfect Array

题意:给出n个数组成的序列a,问是否存在一个子序列,使得子序列的元素乘积不是完全平方数。

思路:只要存在一个数不是完全平方数就可以。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long ll;

const int maxn = 111;

int n, t;
int a[maxn];

int main()
{
    cin >> t;
    while(t--)
    {
        cin >> n;
        int flag = 0;
        for(int i = 1;i <= n; i++)
        {
            cin >> a[i];
            int k = sqrt(a[i]);
            if(k * k != a[i]) flag = 1;
        }
        if(flag) puts("YES");
        else puts("NO");
    }
    return 0;
}

B. AND 0, Sum Big

题意:给出n和k,求满足条件且元素个数为n的序列个数。条件有三:①所有元素都是[0, 2^k - 1]的整数;②所有元素与操作之后为0; ③所有元素之和尽可能大。答案模1e9 + 7;

思路:只要每一位有0就可以满足②,想满足③的话就贪心地每一位只取一个0,一共k位,每一位有n种选择,所以方案数是n^k种。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long ll;

const int mod = 1e9 + 7;
const int N = 1e5, M = 1e6;

int t, n, k;

int qmi(int a, int m)
{
    int res = 1;
    while(m)
    {
        if(m & 1) res = (ll)res * a % mod;
        a = (ll)a * a % mod;
        m >>= 1;
    }
    return res;
}

int main()
{
    cin >> t;
    while(t--)
    {
        cin >> n >> k;
        cout << qmi(n, k) << endl;
    }
    return 0;
}


C. Product 1 Modulo N

题意:给出n,求[1, n - 1]中乘积mod n余1的最长子序列。
思路:看了大佬的博客,我果然做不出C题qwq
这里是大佬的博客_(:з」∠)_
我只想到要选和互质的数,剩下的就不知道怎么办了。
求出所有和n互质的数的mod n的乘积,如果刚好是1,那就皆大欢喜直接全部选中;如果不是1把它除掉就好了这思路太巧秒了(我咋就没想到呢呜呜呜)
再次膜拜一下大佬orz

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long ll;

const int maxn = 1e5 + 10;

int gcd(int x, int y)
{
    if(x % y == 0) return y;
    return gcd(y, x % y);
}

int ans[maxn], idx;

int main()
{
    int n;
    cin >> n;
    int res = 1;
    for(int i = 1;i <= n - 1; i++)
    {
        if(gcd(i, n) == 1)
        {
            ans[++idx] = i;
            res = (ll)res * i % n;
        }
    }
    if(res == 1)
    {
        cout << idx << endl;
        for(int i = 1;i <= idx; i++)
            cout << ans[i] << ' ';
    }
    else
    {
        cout << idx - 1 << endl;
        for(int i = 1;i <= idx; i++)
        {
            if(ans[i] != res) cout << ans[i] << ' ';
        }
    }
    return 0;
}

标签:ABC,int,716,ll,cin,long,res,Div,include
来源: https://blog.csdn.net/qq_45664326/article/details/116517245