请求加强数据
查看原帖
请求加强数据
408677
beifa楼主2023/8/9 22:37

我这样乱搞也过了,但是显而易见应该是假做法,请求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;
}
2023/8/9 22:37
加载中...