Submission #73093570


Source Code Expand

// C
#include <bits/stdc++.h>
#define endl '\n'
#define MOD1 1000000007
#define MOD2 1000000009
#define R1 91138233
#define R2 97266353
#define int long long
using namespace std;

unordered_map<int, int> freq;
vector<int> pr;
int p1, p1t, p2, p2t, r1, r2;

int qpow(int a, int b, int mod){
    int res = 1;
    a %= mod;
    while(b){
        if(b & 1)
            res = res * a % mod;
        a = a * a % mod;
        b >>= 1;
    }
    return res;
}

bool check(int n, int s){
    unordered_map<int, bool> f;
    for(int v : pr){
        if(v == n || f[v]) continue;
        if(v > n) return false;
        if(v == n - v){
            if(freq[v] % 2 != 0)
                return false;
        }
        else{
            int cnt1 = freq[v];
            auto it = freq.find(n - v);
            int cnt2 = (it == freq.end() ? 0 : it->second);
            if(cnt1 != cnt2)
                return false;
        }
        f[v] = true;
        if(v != n - v)
            f[n - v] = true;
    }
    return true;
}

int n, sum, maxx, a[300005];

signed main(){
    cin >> n;
    for(int i = 0;i < n;i++){
        cin >> a[i];
        sum += a[i];
        if(a[i] > maxx)
            maxx = a[i];
        freq[a[i]]++;
    }
    for(auto& p : freq)
        pr.push_back(p.first);
    r1 = qpow(R1, MOD1 - 2, MOD1);
    r2 = qpow(R2, MOD2 - 2, MOD2);
    p1 = p1t = p2 = p2t = 0;
    for(auto& p : freq){
        int v = p.first, w = p.second;
        int t1 = v % (MOD1 - 1);
        int t2 = qpow(R1, t1, MOD1);
        int t3 = qpow(r1, t1, MOD1);
        p1 = (p1 + w * t2) % MOD1;
        p1t = (p1t + w * t3) % MOD1;

        int t4 = v % (MOD2 - 1);
        int t5 = qpow(R2, t4, MOD2);
        int t6 = qpow(r2, t4, MOD2);
        p2 = (p2 + w * t5) % MOD2;
        p2t = (p2t + w * t6) % MOD2;
    }

    int ans[300005], cntans = 0, summ = 2 * sum;
    for(int i = n;i <= 2 * n;i++){
        if(summ % i != 0)
            continue;
        int tmp = summ / i;
        if(tmp < maxx)
            continue;
        int s = 0;
        auto it = freq.find(tmp);
        if(it != freq.end()) s = it->second;
        if(s != i - n)
            continue;

        int eL1 = tmp % (MOD1 - 1);
        int rL1 = qpow(R1, eL1, MOD1);
        int l1 = (p1 - rL1 * p1t) % MOD1;
        if(l1 < 0) l1 += MOD1;
        int r1 = (s * (rL1 - 1)) % MOD1;
        if(r1 < 0) r1 += MOD1;
        if(l1 != r1) continue;

        int eL2 = tmp % (MOD2 - 1);
        int rL2 = qpow(R2, eL2, MOD2);
        int l2 = (p2 - rL2 * p2t) % MOD2;
        if(l2 < 0) l2 += MOD2;
        int r2 = (s * (rL2 - 1)) % MOD2;
        if(r2 < 0) r2 += MOD2;
        if(l2 != r2) continue;

        if(check(tmp, s)) ans[cntans++] = tmp;
    }

    sort(ans, ans + cntans);
    for(int i = 0;i < cntans;i++)
        cout << ans[i] << " ";
    cout << endl;
    return 0;
}

Submission Info

Submission Time
Task C - AtCoder Riko
User xzy404
Language C++23 (GCC 15.2.0)
Score 350
Code Size 2955 Byte
Status AC
Exec Time 279 ms
Memory 34724 KiB

Compile Error

./Main.cpp: In function 'bool check(long long int, long long int)':
./Main.cpp:27:23: warning: unused parameter 's' [-Wunused-parameter]
   27 | bool check(int n, int s){
      |                       ^

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 350 / 350
Status
AC × 3
AC × 22
Set Name Test Cases
Sample 0_sample_1.txt, 0_sample_2.txt, 0_sample_3.txt
All 0_sample_1.txt, 0_sample_2.txt, 0_sample_3.txt, 1_1.txt, 1_2.txt, 1_3.txt, 1_4.txt, 1_5.txt, 2_1.txt, 2_2.txt, 2_3.txt, 2_4.txt, 3_1.txt, 3_2.txt, 3_3.txt, 3_4.txt, 3_5.txt, 3_6.txt, 4_1.txt, 4_2.txt, 4_3.txt, 4_4.txt
Case Name Status Exec Time Memory
0_sample_1.txt AC 2 ms 5896 KiB
0_sample_2.txt AC 2 ms 6040 KiB
0_sample_3.txt AC 2 ms 6072 KiB
1_1.txt AC 223 ms 28092 KiB
1_2.txt AC 211 ms 28088 KiB
1_3.txt AC 216 ms 28048 KiB
1_4.txt AC 215 ms 28092 KiB
1_5.txt AC 216 ms 28044 KiB
2_1.txt AC 270 ms 34628 KiB
2_2.txt AC 268 ms 34444 KiB
2_3.txt AC 279 ms 34724 KiB
2_4.txt AC 275 ms 34628 KiB
3_1.txt AC 187 ms 21352 KiB
3_2.txt AC 109 ms 12988 KiB
3_3.txt AC 74 ms 9132 KiB
3_4.txt AC 67 ms 8376 KiB
3_5.txt AC 2 ms 5820 KiB
3_6.txt AC 67 ms 8628 KiB
4_1.txt AC 26 ms 8408 KiB
4_2.txt AC 76 ms 8360 KiB
4_3.txt AC 1 ms 5932 KiB
4_4.txt AC 2 ms 5940 KiB