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
2026-02-07 22:10:49+0900
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
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