我这样乱搞也过了,但是显而易见应该是假做法,请求hack!(证明或证伪)
#include <bits/stdc++.h>
#define int long long
using namespace std;
int t , n , a[1010] , fl;
void dfs(int pos , int sum , int siz)
{
if(pos > n || siz >= n) return;
if(sum == 0 && siz < n && siz != 0)
{
fl = 1;
return;
}
dfs(pos+1,sum,siz);
dfs(pos+1,sum+a[pos],siz+1);
}
signed main()
{
cin >> t;
while(t--)
{
cin >> n;
int sum = 0;
for(int i = 1 ; i <= n ; ++i)
{
cin >> a[i];
sum += a[i];
}
if(sum%n!=0 || n == 1 || (n == 2 && a[1] != a[2]))
{
cout << "No" << '\n';
continue;
}
if(n == 2)
{
cout << "Yes" << '\n';
continue;
}
sum /= n;
for(int i = 1 ; i <= n ; ++i)
{
a[i] -= sum;
}
sort(a+1,a+n+1);
fl = 0;
if(n <= 20)
{
dfs(1,0,0);
if(fl) cout << "Yes" << '\n';
else cout << "No" << '\n';
continue;
}
int cnt1 = 0, cnt2 = 0;
int f1 = 0 , f2 = 0;
for(int i = 1 ; i <= n ; ++i)
{
if(a[i] > 0 && !f1)
{
cnt1 = n-i+1;
f1 = 1;
}
if(a[i] >= 0 && !f2)
{
cnt2 = i-1;
f2 = 1;
}
}
// cout << cnt1 << " " << cnt2 << " " << sum << '\n';
if(cnt1 == 1 || cnt2 == 1 || cnt1 == n-1 || cnt2 == n-1) cout << "No" << '\n';
else cout << "Yes" << '\n';
}
return 0;
}